Zum Inhalt springen
buybitcoinsmart

Glossar / Protokoll und Upgrades

Miniscript

Was ist Miniscript?
Miniscript ist eine strukturierte Art, die nützliche Teilmenge von Bitcoin Script zu schreiben, damit Software eine Ausgabenrichtlinie analysieren, ihre Kosten berechnen und automatisch für sie signieren kann.

Einfaches Bitcoin Script ist leicht zu schreiben und nahezu unmöglich zu durchschauen: Nichts sagt Ihnen, ob ein Skript ausgabefähig ist, wie groß sein Witness sein wird oder ob ein Zweig tot ist. Miniscript schränkt die Grammatik auf eine Menge kombinierbarer Fragmente ein, die diese Antworten mit sich tragen. Bitcoin Core versteht es in Deskriptoren seit Version 24.0 und kann seit Version 25.0 dafür signieren.

Wie es funktioniert

Miniscript wird aus Fragmenten aufgebaut, die jeweils auf ein bekanntes Muster von Opcodes abbilden, und aus Kombinatoren, die Fragmente zusammenfügen, ohne ihre Garantien zu brechen.

Das Vokabular ist klein. Fragmente benennen Bedingungen: pk(key) für eine Signatur, older(4320) für einen relativen Timelock, after(800000) für einen absoluten, sha256(h) für eine Hash-Preimage. Kombinatoren benennen die Struktur: and_v, or_d, thresh und andor decken fast alles ab, was jemand baut. Eine Wiederherstellungs-Wallet liest sich als or_d(pk(daily_key),and_v(v:pk(backup_key),older(52560))), also als eine Richtlinie, die ein Mensch prüfen kann und die ein Compiler in Skript übersetzen kann.

Jedes Fragment trägt einen Typ und eine Menge von Eigenschaften, und das Typsystem ist es, was das Ganze funktionieren lässt. Komposition ist nur erlaubt, wo die Eigenschaften zusammenpassen, sodass eine Richtlinie, die ein Skript erzeugen würde, das niemand erfüllen kann, oder eines, das ein Dritter unterwegs verändern könnte, nicht kompiliert, statt On-Chain mit Ihrem Geld darin zu scheitern.

Weil die Struktur bekannt ist, erhalten drei Fragen exakte Antworten, bevor Sie Geld darauf einzahlen. Wie groß ist der Witness im schlechtesten Fall, in Gewichtseinheiten. Welche Kombinationen aus Schlüsseln, Preimages und verstrichener Zeit können dies tatsächlich ausgeben. Passt das Skript in die Grenzen, also 10.000 Bytes nach Konsens und eine strengere Obergrenze von 3.600 Bytes nach Standardregeln für ein P2WSH-Witness-Skript, die darüber entscheidet, ob Nodes Ihre Transaktion überhaupt weiterleiten.

Das letzte Stück ist die Erfüllung. Mit einem Skript und dem Material, das ein Unterzeichner hält, kann eine Miniscript-Implementierung den günstigsten gültigen Witness selbst konstruieren. Deshalb kann eine Wallet beliebige Richtlinien unterstützen, ohne für jede einzelne einen maßgeschneiderten Signaturcode mitzuliefern.

Wo Sie es sehen

Miniscript ist unsichtbar, bis Sie eine Wallet wollen, die etwas anderes tut als ein Schlüssel, eine Signatur.

Bitcoin Core erreichte es in Stufen: Version 24.0 verarbeitete Miniscript in P2WSH-Deskriptoren zum Beobachten, und Version 25.0 fügte die Möglichkeit hinzu, dafür zu signieren, also die Version, die Richtlinien-Wallets im Referenzclient nutzbar machte. Die Bitcoin-App von Ledger registriert Richtlinien über das in BIP-388 definierte Wallet-Richtlinienformat, sodass ein Hardware-Gerät ein Skript anzeigen und genehmigen kann, das es nie zuvor gesehen hat.

Das deutlichste Verbraucherprodukt ist Liana, eine Wallet, deren ganze Prämisse eine Miniscript-Richtlinie ist: heute mit Ihrem normalen Schlüssel ausgeben oder nach einer festgelegten Anzahl von Blöcken mit einem Wiederherstellungsschlüssel, den jemand anderes hält. Nachlassplanung und Geschäftskonten mit einem gestuften Genehmigungsweg haben dieselbe Form.

Wenn Sie eine Wallet mit einer einzigen Signatur halten, berührt Sie nichts davon. Es wird wichtig, wenn Sie einen Backup-Pfad wollen, der nicht davon abhängt, dass ein Unternehmen im Geschäft bleibt, und es ist am wichtigsten an dem Punkt, an dem ein selbst geschriebenes Skript sonst die einzige Option wäre.

Miniscript vs. Output-Deskriptor

Ein Deskriptor sagt, welche Schlüssel und welchen Skripttyp; Miniscript sagt, was das Skript im Inneren tut. Sie sind Schichten, keine Alternativen, und sie verschachteln sich: wsh(or_d(pk(A),and_v(v:pk(B),older(52560)))) ist ein Deskriptor, dessen innerer Ausdruck Miniscript ist.

Vor Miniscript konnten Deskriptoren nur ein festes Menü von Vorlagen benennen, etwa wpkh, sortedmulti und tr. Alles außerhalb dieses Menüs bedeutete handgeschriebenes Hex und eine Wallet, die die Adresse beobachten, aber nie aus ihr ausgeben konnte. Miniscript öffnet den inneren Platz für beliebige Richtlinien und behält die Prüfsumme, die Schlüsselherkunft und die Ableitungspfade des Deskriptors genau wie sie waren, weshalb ein Miniscript-Backup weiterhin eine einzige Textzeile ist, die Sie ausdrucken können.

Nicht zu verwechseln mit

Häufig gestellte Fragen

Brauche ich Miniscript für eine gewöhnliche Wallet?

Nein. Eine Wallet mit einer einzigen Signatur und ein Standard-Multisig-Quorum sind bereits durch einfache Deskriptor-Vorlagen abgedeckt. Miniscript verdient seinen Platz, wenn Sie einen zeitlich gesperrten Wiederherstellungsweg oder eine Richtlinie wollen, die keine Vorlage beschreibt.

Ist eine Miniscript-Wallet schwerer zu sichern?

Nicht viel. Das Backup sind weiterhin die Seed-Phrasen plus eine Zeile Deskriptor-Text mit der Richtlinie, und diese Zeile ist nicht geheim. Den Richtlinientext zu verlieren ist so schwerwiegend wie einen Multisig-Deskriptor zu verlieren.

Weiterlesen

Verwandte Begriffe

Mehr zum Thema Protokoll und Upgrades

Diese Seite auf Englisch lesen