Was ist mit „lockeren Standards“ für P2SH-Einlöseskripte in Bitcoin Core 0.10.0 gemeint?

Aus den Versionshinweisen zu Bitcoin Core 0.10.0 :

Standard-Skriptregeln für P2SH-Adressen gelockert

Die IsStandard()-Regeln wurden für P2SH-Einlösungsskripte fast vollständig entfernt, sodass Anwendungen jeden gültigen Skripttyp wie „n-of-m OR y“, Hash-gesperrte Orakeladressen usw. verwenden können. Während das Bitcoin-Protokoll hat diese Arten von Skripten immer unterstützt, ihre eigentliche Verwendung im Mainnet war bisher unbequem, da Standard-Bitcoin-Core-Knoten sie nicht an Bergleute weiterleiten würden, noch würden die meisten Bergleute sie in Blöcke aufnehmen, die sie abgebaut haben.

Im Wesentlichen wird die Kernsoftware nun kompliziertere P2SH-Txns weiterleiten, die zuvor als Nicht-Standard-Transaktionen angesehen wurden .

Welche konkreten Änderungen wurden vorgenommen (z. B. gelockerte Standards)? Gilt es nur für P2SH Txns? Abschließend "n-of-m OR y"und hash-locked oracle addressesseien beispielhaft genannt: Worauf bezieht sich das genau?

IsStandardscheint sich überhaupt nicht verändert zu haben; vielleicht meinten die entwickler darauf zu verweisen IsStandardTx? Jedenfalls finde ich den geänderten Code nicht.
@nickodell Ja, das war mein Verständnis. Klärungsbedarf habe ich noch bei n-of-m OR yund den Oracle-Adressen

Antworten (1)

Welche konkreten Änderungen wurden vorgenommen (z. B. gelockerte Standards)?

Gavin Andresen stellte diese Pull-Anfrage , in der er die Änderung vorschlug, sowie dieses Begründungsdokument, in dem beschrieben wird, warum er die Änderung unterstützt.

Gilt es nur für P2SH Txns?

Es gilt nur für P2SH-Einlöseskripte , das ist das Skript, das ausgeführt wird, um zu sehen, ob Sie über die erforderlichen Daten verfügen, um eine an eine P2SH-Adresse gesendete Ausgabe auszugeben.

Abschließend seien „n-of-m OR y“ und Hash-locked Oracle-Adressen als Beispiele genannt: Worauf bezieht sich das genau?

  • n-of-m OR ybezieht sich auf ein Skript, das nach mehreren Signaturen von einem Satz von Schlüsseln ODER einer einzelnen Signatur von einem anderen Schlüssel sucht. Wenn Alice beispielsweise ein Unternehmen besitzt und Bob und Charlie ihre Angestellten sind, kann sie Bob und Charlie erlauben, zusammenzuarbeiten, um ihre Bitcoins (2 von 2) auszugeben, oder Alice ("y") kann ihre Bitcoins selbst ausgeben .

  • hash-locked oraclebedeutet im Allgemeinen, dass Sie eine Transaktion erstellen können, die nur ausgegeben werden kann, wenn der Hash einiger Daten bereitgestellt wird. Dieses PDF (Seite 24) beschreibt beispielsweise einen Hash-Locked-Vertrag mit drei Parteien: Alice, Bob und Charlie.

    • Alice möchte über Bob 1,00 BTC an Charlie zahlen.

    • Charlie generiert zufällig eine große Zahl r und hasht diese Zahl dann (HASH160), um h zu erzeugen . Der Wert r ist das Orakel und der Wert h ist die Hash-Sperre.

    • Charlie gibt Alice Haschisch .

    • (Transaktion 1) Alice erhält Bobs Pubkey und zahlt ihm 1,01 BTC in einer Ausgabe mit einem Skript wie:<Bob's pubkey> CHECKSIGVERIFY HASH160 <hash h> EQUAL

    • (Transaktion 2) Bob kann diese Ausgabe nicht ohne die Nummer r ausgeben , die Hash h erzeugt hat, aber er weiß, dass Charlie die Nummer r hat , also erhält Bob Charlies Adresse und zahlt ihm 1,00 BTC mit einem Skript wie:<Charlie's pubkey> CHECKSIGVERIFY HASH160 <hash h> EQUAL

    • (Transaktion 3) Charlie gibt die Ausgabe von Transaktion 2 aus, indem er das Signaturskript erstellt: <number r> <Charlie's signature>Dies bedeutet, dass r in der Blockkette aufgedeckt wird.

    • (Transaktion 4) Bob sieht r in der Blockchain und verwendet es irgendwann, um die Ausgabe von Transaktion 1 auszugeben:<number r> <Bob's signature>

    Das obige Beispiel scheint übermäßig erfunden zu sein, aber das oben verlinkte PDF verwendet es als Teil eines Mikrozahlungskanals, der es ermöglicht, Transaktionen außerhalb der Blockchain auf verteilte und wenig vertrauenswürdige Weise abzuwickeln, wodurch Bitcoin möglicherweise viel besser skalieren kann als ohne einen solchen System.

Wow, das ist faszinierend. Können Sie nach Möglichkeit ein funktionierendes Beispiel für ein Oracle-Skript erläutern, das ohne Miner-Abfangen funktionieren könnte?
@WizardOfOzzie Mir fallen keine Beispiele für Hash-gesperrte Orakel ein, die einfacher sind, als dasselbe Problem ohne Hash-gesperrte Orakel zu lösen - es sei denn, der Spender ist ein Miner und muss sich keine Sorgen um das Abfangen durch Miner machen. Es tut uns leid.
@WizardOfOzzie Ich habe gerade dieses PDF gelesen (ab Seite 24), das einen Hash-gesperrten Vertrag beschreibt , an den Peter Todd vermutlich gedacht hat, als er in den Versionshinweisen über Hash-gesperrte Orakel schrieb. Ich werde meine Antwort aktualisieren, um den Prozess in ein paar Minuten zu beschreiben.