Zum Inhalt springen
buybitcoinsmart

Glossar / Entwicklerreferenz

Bitcoin Script

Auch bekannt als Script.

Was ist Bitcoin Script?
Bitcoin Script ist die kleine stapelbasierte Sprache, die jede Bitcoin-Ausgabe trägt und die die Bedingungen festlegt, die jemand erfüllen muss, bevor diese Bitcoin erneut ausgegeben werden können.

Bitcoin werden nicht an Personen gesendet. Sie sind hinter einem kurzen Programm verschlossen, und ausgeben bedeutet, Daten zu liefern, die das Programm mit einem wahren Wert oben auf dem Stack beenden. Die Sprache hat keine Schleifen und keine Rekursion, und ein Legacy-Skript endet bei 10.000 Byte und 201 Operationen, sodass ein Validator immer weiß, dass die Arbeit endet. Deshalb gab es bei Bitcoin nie einen außer Kontrolle geratenen Vertrag.

So funktioniert es

Bitcoin Script ist eine Stack-Maschine, die von links nach rechts liest und nichts anderes tut.

Daten werden auf einen Stack gelegt; Operationen nehmen ihre Argumente davon herunter und legen Ergebnisse zurück darauf. Es gibt keine Variablen, keine Rücksprünge und keine Möglichkeit, etwas außerhalb der Transaktion zu lesen, die gerade validiert wird. Ein Skript ist erfolgreich, wenn die Ausführung ohne Fehler endet und einen wahren Wert oben liegen lässt.

Zwei Teile treffen beim Ausgeben aufeinander. Die ausgegebene Ausgabe trägt die Sperre, Pubkey-Skript genannt. Der sie ausgebende Input trägt den Nachweis, bei älteren Ausgaben Signaturskript genannt, bei Segwit-Ausgaben der Witness. Sie laufen nacheinander mit dem zwischen ihnen übergebenen Stack, nie zu einem einzigen Programm zusammengefügt, eine Trennung, die früh eingeführt wurde, als klar wurde, dass ein Ausgebender, der Operatoren in die sperrende Seite einschleusen könnte, die Bedingungen umschreiben könnte.

Das häufigste Skript in der Geschichte von Bitcoin ist es wert, vollständig gelesen zu werden. Eine Pay-to-Public-Key-Hash-Ausgabe enthält OP_DUP, OP_HASH160, einen 20 Byte langen Hash, OP_EQUALVERIFY und OP_CHECKSIG. Der Ausgebende liefert eine Signatur und einen öffentlichen Schlüssel. Die Ausführung legt beide auf den Stack, dupliziert den öffentlichen Schlüssel, hasht die Kopie auf 20 Byte herunter, legt den erwarteten Hash auf den Stack, vergleicht die beiden und bricht bei Abweichung ab, und prüft dann die Signatur gegen eine Serialisierung der Transaktion selbst. Sechs Schritte, und die gesamte Sicherheit einer Legacy-Adresse ruht auf ihnen.

Die Grenzen sind bewusst und präzise. Ein Legacy- oder P2SH-Skript darf 10.000 Byte oder 201 Nicht-Push-Operationen nicht überschreiten. Kein einzelner Eintrag auf dem Stack darf 520 Byte überschreiten. Der Stack darf nicht mehr als 1.000 Einträge halten. Ein einzelnes OP_CHECKMULTISIG darf nicht mehr als 20 öffentliche Schlüssel nennen. Jede Obergrenze existiert, damit die Kosten für die Validierung eines Blocks begrenzt bleiben, egal was jemand schreibt.

Die Sprache ist zweimal gewachsen, indem reservierten No-op-Codes eine echte Bedeutung gegeben wurde. BIP65 definierte OP_CHECKLOCKTIMEVERIFY im Dezember 2015, wodurch eine Ausgabe sich weigern kann, sich vor einem angegebenen Zeitpunkt oder einer angegebenen Höhe zu bewegen. BIP112 tat dasselbe für OP_CHECKSEQUENCEVERIFY, aktiv ab Block 419.328 im Juli 2016, und fügte relative Timelocks hinzu, gemessen ab der Bestätigung der Coins. Diese beiden Opcodes sind der Grund, warum Lightning-Kanäle, Treuhand mit Frist und zeitlich gesperrte Erbschaftsregelungen überhaupt existieren können.

Warum das beim Bitcoin-Kauf wichtig ist

Die Adresse, an die Sie auszahlen, ist ein Skripttyp, und die Wahl zeigt sich an Ihrer nächsten Gebühr.

Das Ausgeben eines Legacy-Pay-to-Public-Key-Hash-Inputs kostet ungefähr 148 virtuelle Bytes. Das Ausgeben eines nativen Segwit-Inputs kostet ungefähr 68, weil der mit BIP141 eingeführte Witness-Rabatt Witness-Daten zum Vierteltarif berechnet, und ein Taproot-Key-Path-Spend ist noch kleiner. Bei einer Gebühr von 20 sat/vB ist diese Lücke der größte Teil der Kosten einer kleinen Auszahlung, und sie wiederholt sich bei jeder Bewegung von Coins. Wo eine Börse Ihnen die Wahl des Adressformats lässt, an das Sie auszahlen, ist die Wahl des modernen Formats ein dauerhafter Rabatt.

Script ist auch das, was ein Multisig-Tresor tatsächlich ist. Eine Regelung 2-von-3 ist ein Skript, das drei öffentliche Schlüssel nennt und zwei Signaturen verlangt, und ob ein bestimmtes Gerät ein solches ehrlich anzeigen und signieren kann, ist eine Frage, die unsere Hardware-Wallet-Bewertungen direkt aufgreifen. Dasselbe gilt für jeden Erbschaftsplan, der auf einem Timelock aufbaut: Die Coins sind nur wiederherstellbar, wenn jemand das Skript noch hat, weshalb Output-Descriptors, das Klartext-Rezept zu seiner Rekonstruktion, zusammen mit der Seed-Phrase in Ihre Sicherung gehören.

Eine praktische Warnung. Wenn eine Plattform sich weigert, an eine von Ihnen eingefügte Adresse zu senden, ist die Ursache fast immer, dass ihr Auszahlungscode diesen Skripttyp nicht bauen kann, und nicht, dass Ihre Adresse falsch ist. Testen Sie jedes unbekannte Adressformat mit einem kleinen Betrag, bevor Sie ein Guthaben bewegen, das Ihnen wichtig ist.

Der Fehler über 184 Milliarden Bitcoin und die Opcodes, die Satoshi abschaltete

Am 15. August 2010 enthielt Block 74.638 eine Transaktion, die 184.467.440.737,09551616 Bitcoin erzeugte, aufgeteilt in zwei Ausgaben von jeweils ungefähr 92,2 Milliarden.

Die Prüfung, dass die Ausgaben einer Transaktion ihre Eingaben nicht überschritten, verwendete vorzeichenbehaftete Arithmetik fester Breite, und Ausgaben, die groß genug waren, diese Arithmetik zu überlaufen, ergaben in der Summe eine negative Zahl, sodass die Prüfung bestand. Ein gepatchter Client erschien innerhalb von etwa fünf Stunden, und die ehrliche Kette überholte die fehlerhafte auf Höhe 74.691. Diese Coins haben auf der Kette, die jeder nutzt, nie existiert.

Diese Episode ist zusammen mit einer Familie verwandter Fehler in den String- und Arithmetikoperationen der Grund, warum fünfzehn Opcodes dauerhaft deaktiviert sind: OP_CAT, OP_SUBSTR, OP_LEFT, OP_RIGHT, OP_INVERT, OP_AND, OP_OR, OP_XOR, OP_2MUL, OP_2DIV, OP_MUL, OP_DIV, OP_MOD, OP_LSHIFT und OP_RSHIFT. Eine Transaktion, deren Skript nur einen davon enthält, ist ungültig, ob ausgeführt oder nicht. Die Deaktivierung war ein grobes Instrument, das unter Zeitdruck angewandt wurde, und einen Teil davon rückgängig zu machen ist laufende Arbeit: BIP347 schlägt vor, OP_CAT innerhalb von Tapscript wiederherzustellen, wo die neueren Grenzen Missbrauch deutlich erschweren.

Bitcoin Script vs. Tapscript

Tapscript ist Bitcoin Script mit neu geschriebenem Regelwerk, und es gilt nur innerhalb eines Taproot-Script-Path-Spends. BIP342 strich sowohl die Obergrenze von 10.000 Byte für die Skriptgröße als auch die Obergrenze von 201 Operationen, deaktivierte OP_CHECKMULTISIG und OP_CHECKMULTISIGVERIFY und fügte stattdessen OP_CHECKSIGADD hinzu, damit Multisignatur-Regeln stapelweise verifiziert werden können. Signaturprüfungen werden gemessen statt gezählt: Jeder Input erhält ein Budget von 50 plus der serialisierten Größe seines Witness, und jede ausgeführte Signaturprüfung verbraucht 50 davon. Dieselbe Stack-Maschine, andere Abrechnung.

Bitcoin Script vs. ein Pubkey-Skript

Bitcoin Script ist die Sprache; ein Pubkey-Skript ist ein darin geschriebenes Programm. Eine Ausgabe enthält ein Pubkey-Skript, das die Sperre ist. Der Input, der es ausgibt, enthält ein Signaturskript oder einen Witness, das beziehungsweise der der Schlüssel ist. Beide sind Bitcoin Script, und eines von beiden schlicht „das Skript“ zu nennen, ist die häufigste Quelle von Verwirrung beim Lesen einer Rohtransaktion, weil die beiden Hälften getrennt ausgewertet werden und beim Empfang der Coins nur eine von ihnen festgeschrieben wurde.

Nicht zu verwechseln mit

Häufig gestellte Fragen

Ist Bitcoin Script Turing-vollständig?

Nein, und das ist beabsichtigt. Es gibt keine Schleifen und keine Rekursion, und Legacy-Skripte sind auf 10.000 Byte und 201 Operationen begrenzt, sodass ein Validator die Kosten jedes Skripts begrenzen kann, bevor er es ausführt. Deshalb hat Bitcoin nie eine Gas-Messung gebraucht.

Muss ich Bitcoin Script verstehen, um Bitcoin zu kaufen?

Nein, aber der Adresstyp, an den Sie auszahlen, ist ein Skripttyp und er bestimmt Ihre Gebühr. Das Ausgeben eines Legacy-Inputs kostet etwa 148 virtuelle Bytes gegenüber ungefähr 68 bei einem nativen SegWit-Input, und Taproot ist noch günstiger.

Warum sind so viele Bitcoin-Opcodes deaktiviert?

Wegen Fehlern, die 2010 gefunden wurden, darunter der Werteüberlauf, der im Block 74.638 184 Milliarden Bitcoin erzeugte. Fünfzehn String- und Arithmetik-Opcodes wurden abgeschaltet, und BIP347 schlägt nun vor, OP_CAT innerhalb von Tapscript wiederherzustellen, wo die Grenzen enger sind.

Kann Bitcoin Smart Contracts ausführen?

In Grenzen, ja. Multisignatur-Regeln, absolute und relative Timelocks sowie Hash-Locks sind alles gewöhnliches Bitcoin Script, und Lightning ist vollständig daraus aufgebaut. Was es nicht kann, ist Schleifen ausführen, sich selbst aufrufen oder Daten von außerhalb der Transaktion lesen.

Weiterlesen

Verwandte Begriffe

Mehr zum Thema Entwicklerreferenz

Diese Seite auf Englisch lesen