Welche Skripte gelten derzeit als Standard und werden daher tatsächlich propagiert?

Alles, was ich bisher über Skripte gelernt habe, , dass die meisten Skripte zwar theoretisch sehr vielseitig sind (z. B. Multisignatur-Transaktionen zulassen), aber von den Standard-Client-Knoten einfach nicht weitergegeben werden, dh Sie können zwar problemlos Gelder an ein Skript übertragen, aber am Ende haben Sie möglicherweise eine schwierige Zeit, diese Transaktionen jemals auszugeben. Was macht also ein Skript zum Standard/Nicht-Standard, gibt es eine Liste von Skripten, die derzeit vom Netzwerk unterstützt werden?

Antworten (2)

Ich kenne vier Standardskripte. Wie Luca sagte, ist der Quellcode für den Referenzclient die Protokolldefinition, also müssen Sie den Code lesen, um die endgültige Antwort zu erhalten. Wie Peter angemerkt hat, ist ein Standardskript eines, das vom Referenzclient weitergeleitet wird. Ein Nicht-Standard-Skript wird nicht zurückgewiesen, wenn es sich in einem Block befindet, solange es sich um ein gültiges Skript handelt.

Die mir bekannten sind:

  1. Pay-to-PubKey-Hash: Dies ist die Standardzahlung an eine Bitcoin-Adresse. Die Adresse ist in der Ausgabe und die Signatur und der Pubkey sind in der Eingabe.
  2. Pay-to-Pubkey: Dies ist eine Zahlung an einen Pubkey. Der Pubkey ist in der Ausgabe und die Signatur in der Eingabe.
  3. Pay-to-ScriptHash: Dies wird für einige der ausgefalleneren Zahlungstransaktionen verwendet. Ein Skript-Hash ist in der Ausgabe und die Signatur und ein serialisiertes Skript sind in der Eingabe. Beim ersten Durchlauf wird der Skript-Hash gegen das serialisierte Skript verifiziert. Wenn dies der Fall ist, wird das serialisierte Skript erweitert und ein zweiter Durchgang mit diesem Skript durchgeführt.
  4. Pay-to-MultiSig: Mehrere Signaturen sind erforderlich, um das Skript zu signieren. Die Ausgabe enthält die Pubkeys und die Eingabe die Signaturen. Alle Signaturen müssen von einem der Pubkeys verifiziert werden, aber es kann mehr Pubkeys als Signaturen geben. Die aktuelle Grenze für M von N-Skripten ist N=3.
Vielleicht möchten Sie hinzufügen, dass das Limit für Multisig-Transaktionen M-aus-N ist, mit N höchstens 3. Außerdem besteht für P2SH die Anforderung, dass das eingebettete Skript ebenfalls Standard ist. Abgesehen davon ist diese Liste für 0.8.x korrekt.
Beachten Sie auch, dass die Standardität nur Auswirkungen darauf hat, welche Transaktionen weitergeleitet werden. Gültige Nicht-Standard-Skripte können problemlos in Blöcken abgelegt werden, wenn ein Miner dies wünscht.
Also bedeutet P2SH derzeit eine Transaktionsausgabe, die nur weitergeleitet wird, wenn dieses Skript wieder eines dieser vier ist?
@TobiasKienzler Das ist mein Verständnis.
Was M von N betrifft, so ist die einzige Grenze für N per se 15, aber oberhalb einer bestimmten M+N wäre Ihre Transaktionsgröße zu groß, um abgebaut zu werden. Beim Testen von Orisi.org haben wir es geschafft, 3 von 3 und 2 von 4 durch Standardpools zu pushen. Und Sie können 8 von 15 durch den Eligius-Pool schieben - sie haben nur 5 % der Hashing-Power, also müssen Sie 4-10 Stunden warten, bis der tx durchgeht. (Siehe auch bitcoin.stackexchange.com/questions/23893/… )
Außerdem gibt es eine Pull-Anfrage, die von einem der Kernentwickler gestellt wurde, um die Regeln für Skripte zu lockern. In ein paar Monaten wird alles erlaubt sein (siehe bitcoin.stackexchange.com/questions/28181/… ). Und schon vorher - Eligius akzeptiert fast alles :)

Die Standardliste der Operationen für Skripte befindet sich tatsächlich im bitcoindQuellcode, den Sie hier finden können: https://github.com/bitcoin/bitcoin/blob/master/src/script.cpp#L90

Um zu verstehen, welche tatsächlich implementiert und verwendet werden, müssten Sie den Quellcode lesen.

Also nein, dafür gibt es keinen Standard. Der Standard ist das eigentliche Bitcoin-Programm.

Ein Skript gilt also immer dann als Standard, wenn es nur diese Opcodes verwendet?
Nein, dies ist nur die Liste der vorhandenen Opcodes . Nicht alle von ihnen sind sogar aktiviert. Aber es hat nichts mit Standardität zu tun, das wird an anderer Stelle im Code gemacht.
Deshalb sagte ich: "Um zu verstehen, welche tatsächlich implementiert und verwendet werden, müssten Sie den Quellcode lesen."
Ein "Standard"-Skript ist hier ein Fachbegriff. Standardskripte sind diejenigen, die der Referenzclient weiterleitet. Es ist unabhängig davon, ob sie gültig sind oder nicht.