Blockchain/Niveau IV · Tiefer ins Protokoll/4.2 Upgrades/Lektion 2
Tapscript und Skriptbäume (MAST)
Der Baum, der den Vertrag versteckt
MaterialienEin Block-Explorer mit Funktionen zur Untersuchung von Witness-DatenEine mit Taproot kompatible Wallet, die Script-Bäume unterstütztMillimeterpapier zum Skizzieren binärer Merkle-Trees
Neugier
- Warum sollte das Ausgeben nach einer einzigen Klausel eines Vertrags den gesamten Vertrag offenlegen?
- Was macht eine kooperative Ausgabe ununterscheidbar von einer einfachen Signatur?
- Wie kann sich ein einziger Schlüssel auf eine ganze Bibliothek verborgener Ausgabebedingungen festlegen?
Erkunden
- Merkelized Abstract Syntax Trees (MAST) wurden erstmals 2013 von Russell O’Connor beschrieben und in Vorschlägen von 2016 und 2017 weiterentwickelt. Das Konzept legte alternative Ausgabebedingungen in einen Merkle-Tree, sodass ein Ausgebender nur den Zweig offenlegen musste, den er tatsächlich nutzte. Während sich der Begriff „Abstract Syntax Tree“ auf Compiler-Strukturen bezog, in denen jede Bedingung einen neuen Knoten erzeugt, entwickelte sich die Umsetzung in Bitcoin anders. Anthony Towns prägte später das Backronym „Merklized Alternative Script Tree“, um die tatsächlich übernommene Struktur zu beschreiben: eine Menge vollständiger, unabhängiger Scripts, von denen beim Ausgeben nur eines ausgewählt wird.
- Taproot verankerte diese Baumstruktur über BIP341 in den Konsensregeln. Jedes Blatt des Merkle-Trees enthält ein Script, und die Wurzel des Baums fließt in den endgültigen Output-Schlüssel ein. Werden Mittel über den „Script Path“ ausgegeben, legt der Ausgebende das konkrete Leaf-Script, dessen Inputs und den Merkle-Beweis offen – die Hashes der Geschwisterknoten auf jeder Ebene. Die ungenutzten Zweige bleiben on-chain verborgen, was die Privatsphäre bei komplexen Konstruktionen wie Multisig oder Timelocks wahrt, die zuvor in P2SH-Wrapper gezwungen wurden.
- Tapscript (BIP342) ist der spezielle Dialekt für diese Leaf-Scripts und weicht in mehreren entscheidenden Punkten vom herkömmlichen Bitcoin Script ab. OP_CHECKMULTISIG ist in Tapscript deaktiviert. Sein Ersatz, OP_CHECKSIGADD, prüft eine Signatur gegen einen Schlüssel und erhöht einen laufenden Zähler um 1; eine leere Signatur erhöht nichts, während eine ungültige, nicht leere Signatur das gesamte Script scheitern lässt. Ein Script reiht pro Schlüssel einen solchen Opcode aneinander und vergleicht den Zählerstand mit dem Schwellenwert. Jede Signatur wird einem bekannten Schlüssel zugeordnet, sodass kein Zuordnen durch Ausprobieren nötig ist und Signaturen per Batch verifiziert werden können.
- Tapscript hält außerdem mit OP_SUCCESS-Opcodes Raum für Upgrades frei: Heute ist jedes Script, das einen davon enthält, bedingungslos gültig, weshalb niemand sie verwendet – und ein künftiger Soft Fork kann ihnen restriktive Bedeutungen geben, ohne etwas ungültig zu machen, das in Gebrauch ist. Die bisherige Grenze von 10.000 Bytes für die Script-Größe entfällt in Tapscript; stattdessen ist die Script-Größe nur durch das Blockgewicht und Policy-Limits begrenzt. Zudem skaliert ein Budget für Signaturoperationen mit der Größe des Witness und verhindert so Denial-of-Service-Angriffe durch übermäßige Signaturprüfungen.
- Betrachten wir ein praktisches Beispiel: Ein Nutzer hält Mittel in einem 2-of-2-Key-Path für alltägliche Ausgaben, bei dem beide Parteien gemeinsam signieren, sodass nichts als eine gewöhnliche Schnorr-Signatur sichtbar wird. Der Script-Baum enthält jedoch ein verborgenes Leaf, mit dem ein einzelner Schlüssel nach einem einjährigen Timelock allein ausgeben kann. Reagiert der kooperierende Partner nicht mehr, kann der Nutzer diesen Wiederherstellungszweig aktivieren. Der Merkle-Beweis legt nur dieses konkrete Timelock-Script offen, während andere mögliche Zweige – etwa Social Recovery oder Hashlocks – vollständig privat bleiben.
- Um diese Mechanik zu überprüfen, öffnen Sie einen Block-Explorer und suchen Sie eine Taproot-Transaktion, die über den Script Path ausgegeben wurde. Untersuchen Sie den Witness: die Inputs des Scripts, das Leaf-Script selbst und einen Control Block, dessen erstes Byte die Leaf-Version (0xc0 für Tapscript) mit einem Paritätsbit kombiniert, gefolgt vom internen Schlüssel und einem 32-Byte-Hash pro Ebene des Baums. Vergleichen Sie dies mit einer Key-Path-Ausgabe desselben Adresstyps; diese zeigt nur eine 64- oder 65-Byte-Signatur und keinerlei Script-Daten – ein Beleg dafür, dass komplexe Verträge unsichtbar bleiben, solange sie nicht genutzt werden.
Kernfakten
- MAST steht für Merklized Alternative Script Tree – ein Backronym, das von Anthony Towns geprägt wurde, um die Struktur von Taproot zu beschreiben.
- Tapscript hebt die bisherige Grenze von 10.000 Bytes für die Script-Größe auf; Scripts sind nur noch durch das Blockgewicht und Policy-Regeln begrenzt.
- OP_CHECKSIGADD ersetzt in Tapscript OP_CHECKMULTISIG und ermöglicht batchfreundliche Schwellenwertprüfungen.
- Eine Script-Path-Ausgabe legt das Leaf-Script, dessen Inputs und einen Merkle-Beweis aus den Hashes der Geschwisterknoten offen.
- OP_SUCCESS-Opcodes halten Raum für künftige Soft Forks frei, ohne bestehende Tapscripts zu beeinträchtigen.
- Die Leaf-Version 0xc0 kennzeichnet Tapscript; unbekannte Leaf-Versionen bleiben für künftige Soft Forks unbeschränkt.
Übung neun, sechs, drei, eins
9SammelnListen Sie 9 unterschiedliche Ausgabebedingungen auf (z. B. Multisig, Timelock, Hashlock), die in einem Taproot-Skriptbaum verwendet werden könnten. Geben Sie den Hauptzweck jeder Bedingung an.
6GruppierenGruppieren Sie die 9 Bedingungen in 6 Kategorien nach ihren Auswirkungen auf die Privatsphäre: vollständig verborgen, teilweise offengelegt, immer sichtbar oder sonstige strukturelle Einschränkungen.
3VerdichtenReduzieren Sie die 6 Gruppen auf 3 zentrale Gründe, warum das Verbergen bestimmter Script-Zweige für die Effizienz der Chain und die Sicherheit der Nutzer wichtig ist.
1KristallisierenSchreiben Sie 1 Satz, der erklärt, wie ein Merkle-Tree es einem einzigen öffentlichen Schlüssel ermöglicht, sich auf mehrere einander ausschließende Ausgaberegeln festzulegen, ohne sie offenzulegen.
Faktcheck
Datumsangaben, Zahlen und Behauptungen wurden mit den unten aufgeführten veröffentlichten Quellen abgeglichen.
- BIP341: Taproot: SegWit version 1 spending rules
- BIP342: Validation of Taproot Scripts
- Bitcoin Optech, 'MAST' and 'Tapscript' topics
- Anthony Towns, 'Merklized Alternative Script Trees' proposal discussions