Ich hämmere seit ein paar Tagen mit dem Kopf auf einen Schreibtisch und versuche, das Segwit-Protokoll richtig zu verstehen.
Ein weiteres Hindernis hat mich aus der Fassung gebracht und ich habe Mühe, das Konzept von „scriptCode:“ zu verstehen, das in den Signaturbeispielen von bip0143 https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki# verwendet wird. Spezifikation
Ich verstehe, dass ein scriptPubKey im Grunde die Sperrbedingungen sind, die bei der Ausgabe auf eine Ausgabe gesetzt werden. Und ich verstehe auch, dass scriptSig eine zuvor gesperrte Ausgabe (die für meinen Pubkey/Pubkeyhash bestimmt ist) einlösen soll.
Ich hatte ziemlich gut verstanden, was ich oben gesagt habe, wobei die scriptSig-Datenelemente auf den Stack geschoben und dann von pubKeyHash ect ausgewertet wurden. Aber jetzt gibt es dieses seltsame "scriptCode"-Feld, das verdächtig identisch mit einem p2pkh pubKeyScript aussieht.
So kam ich zu dem Schluss, dass es einfach in jedem hashPreImage gleich verwendet wird:
DUP HASH160 <keyhash> EQUALVERIFY CHECKSIG
Aber dann fing ich an, über die Reihenfolge der Stapelauswertung nachzudenken, und war wieder verwirrt. Wie ist die Reihenfolge der Stapelauswertung? Ist es: scriptSig-Daten-Push > pubKeyScript-Auswertung > scriptCode? Was ist, wenn Zeugendaten involviert sind? Wann wird das auf den Stack geschoben? Oder verfehle ich hier völlig den Sinn?
Eine andere Sache, über die ich verwirrt bin, ist die Auswertung von p2sh-p2wpkh. Ich verstehe nicht, warum das scriptSig ein Push des einlösenScript sein muss:
0 <20-byte-key-hash>
um meine Hauptfrage noch einmal zu betonen. Ich kämpfe mit dem Konzept von scriptCode und der Reihenfolge der Skriptauswertung im Allgemeinen. Ich würde gerne wissen, ob der scriptCode immer das gleiche Format hat, wenn ich nur vorhabe, p2sh-p2wpkh, pk2pkh, pk2pkh zu signieren
Die Ausführungsreihenfolge lautet:
Der scriptCode ist einfach ein Name für "den ausgeführten Code". Innerhalb der scriptPubKey-Auswertung ist es gleich dem scriptPubKey. Innerhalb der Auswertung des RedeemScripts ist es gleich dem RedeemScript. Innerhalb der Auswertung des Zeugenskripts ist es gleich dem Zeugenskript.
Kryptodeskriptor
Pieter Wuille
Malone