Segwit mit Multisig

Ich habe eine Bitcoin-Transaktion analysiert, die sowohl mit Segwit als auch mit Nicht-Segwit für Multisig-Skripte funktioniert. Hier ist die Transaktion: https://www.blockchain.com/en/btc/tx/80975cddebaa93aa21a6477c0d050685d6820fa1068a2731db0f39b535cbd369

Beachten Sie, dass wir auf den Indizes 0, 1 und 2 das Entsperrskript in der scriptsig abgelegt haben und auf Index 3 das Zeugenprogramm verwenden. Keine Probleme bis jetzt.

Was mich nervt, ist, warum, wenn ich das Redeem-Skript von den Indizes 0, 1 und 2 bekomme und das reifemd60, sha256 ausführe, eine Prüfsumme erstelle und in base58 kodiere, es die öffentliche Adresse generiert, wie wir auf dem Bildschirm von blockchain.com sehen können. Aber wenn ich dasselbe mit dem Einlösungsskript mache, das sich im Zeugenabschnitt befindet, gibt es mir eine völlig andere Adresse zurück, warum passiert das?

Außerdem, was ist das scriptSig auf dem Index 3? Wie wird es generiert?

Beispiel:

Einlöseskript von Index 0:

522102194e1b5671daff4edc82ce01589e7179a874f63d6e5157fa0def116acd2c3a522103a043861e123bc67ddcfcd887b167e7ff9d00702d1466524157cf3b28c7aca71b2102a49a62a9470a31ee51824f0ee859b0534a4f555c0e2d7a9d9915d6986bfc200453ae

Die Adresse, die mit meinem Skript aus Index 0 generiert wurde:

3JUJgXbB1WpDEJprE8wP8vEXtba36dAYbk

Es ist das gleiche wie die Transaktion.

Einlöseskript von Index 3 (Segwit):

5221021e6617e06bb90f621c3800e8c37ab081a445ae5527f6c5f68a022e7133f9b5fe2103bea1a8ce6369435bb74ff1584a136a7efeebfe4bc320b4d59113c92acd869f38210280631b27700baf7d472483fadfe1c4a7340a458f28bf6bae5d3234312d684c6553ae

Die aus Index 3 mit meinem Skript generierte Adresse:

36aKiVksQRLKwByBYVz3KwquFcvHZkwroP

Adresse aus der von blockchain.com wiederhergestellten Transaktion

3CYkk3x1XUvdXCdHtRFdjMjp17PuJ8eR8z

Antworten (1)

Sie berechnen nur die P2SH-Adresse für das Segwit-Skript. Es ist jedoch nicht nur P2SH, es ist ein Segwit-Skript, das in ein P2SH verpackt ist. Sie müssen tatsächlich zuerst das WitnessScript (das Multisig-Skript oder das Segwit-Einlöseskript) nehmen und damit ein P2WSH-Ausgabeskript erstellen. Dann wird dieses Skript zum RedeemScript für das P2SH-Skript.

Also gegeben

5221021e6617e06bb90f621c3800e8c37ab081a445ae5527f6c5f68a022e7133f9b5fe2103bea1a8ce6369435bb74ff1584a136a7efeebfe4bc320b4d59113c92acd869f38210280631b27700baf7d472483fadfe1c4a7340a458f28bf6bae5d3234312d684c6553ae

als WitnessScript produzieren Sie

002044c55c1da36a576217259c3bc21b0c3943f7eb3ff4e3c381d9fd3502434b9e87

als einlösenScript. Dies ist ein P2WSH-Ausgabeskript. Dies wird dann gehasht, um den Hash im P2SH-Skript zu erstellen:

a914771962306e72e479245d48e879dd2a1862225b4c87

die eine Adresse von hat

3CYkk3x1XUvdXCdHtRFdjMjp17PuJ8eR8z
Gibt es eine BIP, die es definiert?
Damit wir also das RedeemScript aus WitnessScript generieren können, müssen wir sie reifen lassen?
Nein. Sie müssen das WitnessScript mit SHA256 versehen. Fügen Sie das dann in ein p2wsh-Skript ein. Hash160 dann dieses Skript für die p2sh-Adresse.
Für natives Segwit brauchen wir das nicht, oder? Da wir das sigScript-Feld nicht mehr haben werden.
Für natives Segwit müssen Sie das WitnessScript noch hashen. Aber es ist nicht nötig, ein weiteres Skript zu erstellen und das zu hashen. Natives Segwit hat auch einen anderen Adresstyp.