Erstellen Sie Pay-to-Witness-Skript-Hash in Pay-to-Script-Hash-Adresse

Ich versuche, eine Segwit-kompatible Multisignatur-Adresse als P2WSH zu generieren, die in BIP16 P2SH verschachtelt ist, wie in BIP141 beschrieben. Grundsätzlich möchte ich eine P2WSH-verschachtelte-in-P2SH-Adresse aus n öffentlichen Schlüsseln und den m erstellen, die zum Signieren eines gültigen TX erforderlich sind.

(m required, n public keys) -> base 58 bitcoin address

Ich versuche, den Beispielen in Mastering Bitcoin zu folgen , um die Zahlen zu überprüfen, die ich bekomme, aber mir fehlt definitiv etwas. (Ich werde alle Abschnitte verlinken, auf die ich mich beziehe, aber es sollte nicht notwendig sein, sie tatsächlich zu lesen – hoffentlich wird der Fehler in meinem Prozess für jemanden offensichtlich sein.)

  1. Er definiert ein Standard-P2SH-2-von-5-Multisig: OP_2 key0 key1 key2 key3 key4 OP_5 OP_CHECKMULTISIGwo die Schlüssel sind

    04C16B8698A9ABF84250A7C3EA7EEDEF9897D1C8C6ADF47F06CF73370D74DCCA01CDCA79DCC5C395D7EEC6984D83F1F50C900A24DD47F569FD4193AF5DE762C587
    04A2192968D8655D6A935BEAF2CA23E3FB87A3495E7AF308EDF08DAC3C1FCBFC2C75B4B0F4D0B1B70CD2423657738C0C2B1D5CE65C97D78D0E34224858008E8B49
    047E63248B75DB7379BE9CDA8CE5751D16485F431E46117B9D0C1837C9D5737812F393DA7D4420D7E1A9162F0279CFC10F1E8E8F3020DECDBC3C0DD389D9977965
    0421D65CBD7149B255382ED7F78E946580657EE6FDA162A187543A9D85BAAA93A4AB3A8F044DADA618D087227440645ABE8A35DA8C5B73997AD343BE5C2AFD94A5
    043752580AFA1ECED3C68D446BCAB69AC0BA7DF50D56231BE0AABF1FDEEC78A6A45E394BA29A1EDF518C022DD618DA774D207D137AAB59E0B000EB7ED238F4D800
    

davon HASH160ist 54c557e07dde5bb6cb791c7a540e0a4796f5e97e. Ok so weit so gut; Ich habe den gleichen Wert wie das Buch.

  1. Dann bespricht er eine P2WSH-Transaktion und verweist auf dasselbe Multisig-Skript

    Wir haben diese Art von Skript in [p2sh] gesehen. In diesem Beispiel wurde P2SH von Mohammeds Firma verwendet, um ein Multisignatur-Skript auszudrücken. Zahlungen an Mohammeds Firma wurden mit einem Sperrskript wie dem folgenden verschlüsselt: Beispiel-P2SH-Ausgabeskript

    HASH160 54c557e07dde5bb6cb791c7a540e0a4796f5e97e EQUAL
    

    und definiert dann das P2WSH-Ausgabeskript

    Beispiel für ein P2WSH-Ausgabeskript

    0 9592d601848d04b172905e0ddb0adde59f1590f1e553ffc81ddc4b0ed927dd73
    

    Das Segregated Witness-Programm besteht aus zwei Werten, die auf den Stack gepusht werden: eine Witness-Version (0) und der 32-Byte-SHA256-Hash des Redeem-Skripts.

Wie bekommt er dieses P2WSH-Ausgabeskript?

Wenn ich das Beispiel-P2SH-Skript nehme, script.

HASH160(script) = 54c557e07dde5bb6cb791c7a540e0a4796f5e97e
SHA256(script) = a9b7b38d972cabc7961dbfbcb841ad4508d133c47ba87457b4a0e8aae86dbb89
SHA256(HASH160(script)) = 9796557ff06241ca75fdbc09359e9916186cb8398dc01fd58afc72a3ac86ce63

Keines davon entspricht dem bereitgestellten:

9592d601848d04b172905e0ddb0adde59f1590f1e553ffc81ddc4b0ed927dd73

Ich habe auch versucht, die öffentlichen Schlüssel zu komprimieren, und konnte diesen Wert immer noch nicht erhalten. Ich bin mir ziemlich sicher, dass es immer noch um dasselbe Beispiel geht, weil es mit weitergeht

Mohammeds Firma kann Ausgaben der P2WSH-Ausgabe [...]

Wenn ich den 32-Byte-SHA256-Hash des Einlösungsskripts herausfinden kann, kann ich loslegen, da an diesem Punkt die Adresse berechnet werden kann

sha256_value = 9592d601848d04b172905e0ddb0adde59f1590f1e553ffc81ddc4b0ed927dd73
p2wsh_output = OP_0 + OP_32 + sha256_value
address = Base58(05 + HASH160(p2wsh_output))

Antworten (2)

Dies ist tatsächlich ein Fehler im Buch: https://github.com/bitcoinbook/bitcoinbook/issues/440

Siehe diesen Unterschied für die richtigen Schritte.

Scheint mir das

... Erstellen einer Pay-to-Witness-Script-Hash (P2WSH)-Ausgabe, die so aussehen würde : 0 9592d601848d04b172905e0ddb0adde59f1590f1e553ffc81ddc4b0ed927dd73...

bedeutet, dass dieser Hash ein Beispiel ist, das nicht aus den obigen Daten abgeleitet wurde

Ok cool, mache ich den Rest der Schritte dann richtig? / Gibt es andere Testvektoren, mit denen ich vergleichen kann? Wäre die Adresse dann Base58(05 + HASH160(OP_0 + OP_32 + {sha256 standard p2sh scrit}))?
Ich denke, Sie können die „Testvektoren“ aus der aktuellen Bitcoin/Testnet-Blockchain „extrahieren“, anstatt gefälschte Quellen aus einem Buch zu überprüfen :)
OK. Ist der Ablauf also richtig?
Ich habe auch keine 9592d6018...bereitgestellten Daten erhalten, aber ich habe nicht viel Zeit für diese Frage aufgewendet. Ich kann sagen, dass es viele solcher Transaktionen in der Blockchain gibt. zum Beispiel können Sie das Testnet-Paar testnet.smartbit.com.au/tx/… und testnet.smartbit.com.au/tx/… nehmen und versuchen, von zu 1e8dda3...bekommen5221038e81669c...