Zum Inhalt springen
buybitcoinsmart

Glossar / Entwicklerreferenz

OP_CHECKMULTISIG

Was ist OP_CHECKMULTISIG?
OP_CHECKMULTISIG prüft eine Gruppe von Signaturen gegen eine Liste öffentlicher Schlüssel in einem Schritt, und Taproot-Ausgaben können ihn überhaupt nicht nutzen, weil er die Batch-Verifizierung blockiert.

Spezifiziert im BIP-11.

Byte 0xae hat die gemeinsame Verwahrung möglich gemacht: Es nimmt eine Schlüsselanzahl vom Stapel, entsprechend viele öffentliche Schlüssel, eine Anzahl erforderlicher Signaturen, entsprechend viele Signaturen und dann ein Element zu viel. Der Konsens erlaubt bis zu 20 Schlüssel in einem einzigen Aufruf. Es ist der Grund, warum ein Unternehmen verlangen kann, dass drei von fünf Bevollmächtigten eine Auszahlung genehmigen, ohne dass einer von ihnen allein handeln kann.

So funktioniert es

Die Prüfung ist ein einziger Durchlauf durch zwei Listen und keine Suche. Der Opcode geht die Signaturen der Reihe nach durch und probiert jede gegen aufeinanderfolgende öffentliche Schlüssel, sodass die Signaturen in derselben relativen Reihenfolge erscheinen müssen wie die Schlüssel, zu denen sie gehören. Legen Sie ein gültiges 2-von-3 mit vertauschten Signaturen vor, schlägt das Skript fehl, eine häufige Ursache für Verwirrung, wenn Menschen Multisig-Ausgaben von Hand zusammenstellen.

Der Stapel bleibt um ein Element zu kurz, und das war immer so. Die ursprüngliche Implementierung nahm ein zusätzliches Element vom Stapel, das sie nie verwendete, ein Fehler, der nicht entfernt werden konnte, ohne jede bestehende Coin zu brechen. Die Unterzeichner lernten, zuerst ein Wegwerf-Element abzulegen, und BIP-147 schloss die daraus folgende Manipulierbarkeit, indem es verlangte, dass dieses Element leer ist, ab Block 481.824.

Bei der Kostenrechnung wird es spürbar. Ein reiner Aufruf wird mit 20 Signaturoperationen berechnet, unabhängig davon, wie viele Schlüssel wirklich darin sind, es sei denn, ein Opcode für eine kleine Zahl steht unmittelbar davor, dann wird diese Zahl berechnet. Ein Block ist auf 80.000 Einheiten an Kosten für Signaturoperationen begrenzt, und die Weiterleitungsrichtlinie erlaubt höchstens 15 davon in einem einzelnen Pay-to-Script-Hash-Input. Diese Zahl aus der Richtlinie, nicht das eigene Limit von 20 des Opcodes, ist der Grund, warum Skriptadressen bei fünfzehn Mitunterzeichnern enden.

Tapscript hat ihn ganz abgeschafft. BIP-342 ließ den Opcode und seine Verify-Variante innerhalb eines Taproot-Leafs sofort fehlschlagen, weil das Prüfen eines Stapels von Schnorr-Signaturen gegen eine Liste in einem Vorgang die Batch-Verifizierung zunichtemacht, die Schnorr erst wertvoll macht.

Wo er auftaucht

Die 2-von-2-Ausgabe, die jeden Lightning-Kanal finanziert, verwendet OP_CHECKMULTISIG, was den Opcode allein schon in einen großen Teil der Skript-Ausgaben des Netzwerks bringt. Unternehmenstresore, Treuhandkonstruktionen bei älteren Peer-to-Peer-Marktplätzen und Cold Storage von Börsen, der vor Taproot aufgebaut wurde, nutzen ihn ebenfalls, meist als 2-von-3 innerhalb eines Skript-Hashs.

Reine Aufrufe, bei denen die Schlüssel direkt in der Ausgabe stehen und kein Hash davor, sind für die Weiterleitung mit bis zu drei Schlüsseln Standard und werden fast nie verwendet, weil der Absender für jeden Schlüssel zahlt und die ganze Konstruktion öffentlich ist, bevor sich eine einzige Coin bewegt. Im Jahr 2014 wurde dieses Format kurzzeitig ein Weg, Dateien auf der Blockchain zu speichern, was mit dazu beiträgt, dass Argumente zur Datenspeicherung immer wieder auftauchen, sobald jemand die Weiterleitungsrichtlinie anfasst.

Wenn Sie jetzt eine gemeinsame Verwahrung einrichten, wird Ihre Wallet eher eine Taproot-Konstruktion mit der gezählten Alternative erzeugen oder ein P2WSH-Skript, wenn Kompatibilität wichtiger ist als Gebühren.

OP_CHECKMULTISIG vs. P2SH-Multisig

OP_CHECKMULTISIG ist eine Anweisung und P2SH-Multisig ist eine Art, sie zu verpacken. Der Opcode sagt, wie ein Quorum geprüft wird; die Verpackung sagt, dass das Quorum hinter einem Hash verborgen und zur Ausgabezeit offengelegt wird. Dieselbe Anweisung kann in einer reinen Ausgabe mit offen sichtbaren Schlüsseln erscheinen, in einem Redeem-Skript hinter einer Adresse, die mit 3 beginnt, oder in einem Witness-Skript hinter einer bc1q-Adresse, und die drei unterscheiden sich enorm in Kosten und Privatsphäre, während sie identische Prüflogik ausführen. Was Sie nicht tun können, ist, die Anweisung in einem Taproot-Leaf zu verwenden, weshalb moderne Quoren mit einem ganz anderen Opcode gebaut werden.

Nicht zu verwechseln mit

Häufig gestellte Fragen

Warum schlägt meine Multisig-Ausgabe fehl, obwohl alle Signaturen gültig sind?

Fast immer, weil die Signaturen in der falschen Reihenfolge stehen. Der Opcode geht die beiden Listen parallel durch, sodass die Signaturen in derselben relativen Reihenfolge erscheinen müssen wie ihre öffentlichen Schlüssel, und er geht nicht zurück, um einen früheren Schlüssel erneut zu probieren.

Wird dieser Opcode aus Bitcoin entfernt?

Er funktioniert weiterhin in Legacy- und SegWit-Skripten der Version 0 und wird es auch weiterhin tun, da bestehende Coins von ihm abhängen. Taproot-Leafs können ihn nicht nutzen, daher werden neue Quoren mit OP_CHECKSIGADD gebaut, das geprüfte Signaturen einzeln zählt.

Weiterlesen

Verwandte Begriffe

Mehr zum Thema Entwicklerreferenz

Diese Seite auf Englisch lesen