Hilfe beim Verständnis von OP-Codes im Multisig-Einlösungsskript (hex)

Ich habe dieses Wesentliche gelesen und bin mir nicht sicher, ob ich den Hex des Multisig-Einlöseskripts richtig verstehe/lese (Zeile 14). Es ist:

5241 0491bb a2510912a5bd37da1fb5b1673010e43d2c6d812c514e91bfa9f2eb129e1c183329db55bd868e209aac2fbc02cb33d98fe74bf23f0c235d6126b1d8334f8641 04865c 40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac09ef122b1a986818a7cb624532f062c1d1f8722084861c5c3291ccffef4ec687441 048d24 55d2403e08708fc1f556002f1b6cd83f992d085097f9974ab08a28838f07896fbab08f39495e15fa6fad6edbfb1e754e35fa1c7844c41f322a1863d4621353 ae

Ich sehe also die drei öffentlichen Schlüsselpaare, beginnend in Fettschrift. Ich verstehe, dass das letzte Byte (0xae) OP_CHECKMULTISIG ist. Aber ich bin verwirrt über die Bytes (0x53, vor 0xae) und die 5241 am Anfang. Ich habe den Eindruck, dass vor den öffentlichen Schlüsseln zwei Variablen auf den Stack geschoben werden sollten; eine wegen des Checkmultisig-Fehlers und eine andere, um die m von n erforderlichen Signaturen zum Entsperren des Bitcoin zu identifizieren. Und dann sollte n direkt vor dem letzten Opcode stehen (in diesem Fall 3).

Was verstehe ich nicht richtig? Was hat es mit den Fünfern und der 41 am Anfang auf sich? Danke für die Hilfe!

Link zum Wesentlichen, falls defekt: https://gist.github.com/gavinandresen/3966071

Antworten (1)

Du bist auf dem richtigen Weg. 0x52 und 0x53 sind die Multisig-Elemente ("2 of 3") und 0xae beendet die Struktur. Der "off by one error" steht vor den Signaturen, was sich in den Zeilen 58-60 des Kerns befindet. Eine gute Erklärung des Multisig findet sich (natürlich) in Andreas‘ Buch „Mastering Bitcoin“. Ich habe die folgende Struktur entschlüsselt:

    52: OP_2:                the number 2 is pushed onto stack 
    41: OP_DATA_0x41:        uncompressed pub key (65 Bytes)
        0491BBA2510912A5:BD37DA1FB5B16730
        10E43D2C6D812C51:4E91BFA9F2EB129E
        1C183329DB55BD86:8E209AAC2FBC02CB
        33D98FE74BF23F0C:235D6126B1D8334F
        86
        MultiSig's uncompressed Public Key (X9.63 form)
        corresponding bitcoin address is:    139FpKh63Vn4Y73ijtyqq8A6XESH8brxqs
    41: OP_DATA_0x41:        uncompressed pub key (65 Bytes)
        04865C40293A680C:B9C020E7B1E106D8
        C1916D3CEF99AA43:1A56D253E69256DA
        C09EF122B1A98681:8A7CB624532F062C
        1D1F8722084861C5:C3291CCFFEF4EC68
        74
        MultiSig's uncompressed Public Key (X9.63 form)
        corresponding bitcoin address is:    1PNvbXZFysxvx3252w9JHMa7zbG95snqnm
    41: OP_DATA_0x41:        uncompressed pub key (65 Bytes)
        048D2455D2403E08:708FC1F556002F1B
        6CD83F992D085097:F9974AB08A28838F
        07896FBAB08F3949:5E15FA6FAD6EDBFB
        1E754E35FA1C7844:C41F322A1863D462
        13
        MultiSig's uncompressed Public Key (X9.63 form)
        corresponding bitcoin address is:    1jqo3ptYSnUhCJq75MMyRuwC2zNyQqRy3
    53: OP_3:                the number 3 is pushed onto stack
        ##### --> 2-of-3 Multisig 
    AE: OP_CHECKMULTISIG:    terminating multisig

        corresponding bitcoin address is:    3QJmV3qfvL9SuYo34YihAf3sRCW3qSinyC
Okay, das macht Sinn. Ich war mir nicht sicher, wie OP_2-16 funktioniert, aber Ihre Antwort, glaube ich, klärt das auf. Wenn dies ein Schema mit am = 10 und n = 13 wäre, hätten wir dann hypothetisch 0x5a und 0x5d? Unser höchstmöglicher Wert für Feld n ist 0x60, oder? Danke für die Hilfe!
die Codes sind hier aufgelistet: en.bitcoin.it/wiki/Script#Constants und ja, 0x5a und 0x5d. Höchster Wert = 0x60 (OP_16). Hinweis: Multisigs haben ihre Grenzen, Sie können nicht einfach ein 10-von-13-Multisig erstellen, da es die Überprüfungsgrenzen / -größe überschreitet. Pieter hat es hier erklärt: bitcoin.stackexchange.com/questions/23893/… - Ich denke, mit segwit werden die Limits höher verschoben.