Papier-Wallet-SegWit-Adresse generieren

Ich versuche, die SegWit Paper Wallet-Adresse von WIF zu generieren:

Mein WIF ist L5mHKZsCLS27nSoGM3RdAwuxjvg7XhJdP25LgqdXe6zF11wpWdbT.

Ich konvertiere WIF in einen komprimierten öffentlichen Schlüssel:

Komprimierter öffentlicher Schlüssel:03fac6879502c4c939cfaadc45999c7ed7366203ad523ab83ad5502c71621a85bb

Ich erstelle eine P2SH-P2WPKH-Adresse anhand der Anweisungen unter Erstellung einer P2SH-P2WPKH-Adresse

mit folgendem Algorithmus:

  1. Berechnen Sie den RIPEMD160 des SHA256 eines öffentlichen Schlüssels:

SHA256 des öffentlichen Schlüssels:cfad24b0bc2bba2c8bb2c8d619dca2b74221930793bca50df73856f0bbba10c9

RIPEMD160 von SHA256-Hash:d5e5d05edfe2ed61099bf3f0d53be2775bbc6d0d

  1. Erstellen Sie ein P2SH-Einlöseskript als OP_PUSH publicKeyHash:

EinlösungsSkript:0014d5e5d05edfe2ed61099bf3f0d53be2775bbc6d0d

  1. scriptPubKey generieren alsOP_HASH160 hash160(redeemScript) OP_EQUAL

scriptPubKey:a914a19949e546c2f4d410cbb061c986b9ff3099ae7087

  1. RIPEMD160-Hash von scriptPubKey generieren:

Hash:dc62e525af22d1f0f17cc2a091cf2c9fb36bf553

  1. Adresse mit 0x05Präfix und doppelter SHA256-Hash-Prüfsumme generieren:

Ergebnis:3MnK46gvixm8hk7mJTQTAqenniSodjXPrJ

Erwartetes Ergebnis laut Segwitaddress ist:

33voQqbNAYyig272KjcX8GkucWn2x25WEg

Was mache ich falsch?

Aktualisieren

Dank der akzeptierten Antwort sind hier die richtigen Schritte, um dies zu tun:

Public key - compressed: 
03fac6879502c4c939cfaadc45999c7ed7366203ad523ab83ad5502c71621a85bb

SHA256(public key) =
cfad24b0bc2bba2c8bb2c8d619dca2b74221930793bca50df73856f0bbba10c9

RIPEMD160(SHA256(public key)) =
7646c030f7e75b80f0a31cdcab731e6f424f22b2

redeemScript (OP_0 pubkeyHash160):
00147646c030f7e75b80f0a31cdcab731e6f424f22b2

SHA256(redeemScript) =
a10e523968ba784d24ccd54e613d8f747d6649e42b1df4fdcec6658262620651

RIPEMD160(SHA256(redeemScript)) =
188ba16284702258959d8bb63bb9a5d979b57875

P2SH address base58(0x05 | hash | 4-byte sha256 checksum) =
33voQqbNAYyig272KjcX8GkucWn2x25WEg

Antworten (1)

  1. Erstellen Sie ein P2SH-Einlöseskript als OP_PUSH publicKeyHash:

EinlösungsSkript:0014d5e5d05edfe2ed61099bf3f0d53be2775bbc6d0d

Es ist eigentlich `OP_0, aber Sie haben trotzdem das Richtige herausgebracht.

  1. scriptPubKey generieren alsOP_HASH160 hash160(redeemScript) OP_EQUAL

scriptPubKey:a914a19949e546c2f4d410cbb061c986b9ff3099ae7087

  1. RIPEMD160-Hash von scriptPubKey generieren:

Hash:dc62e525af22d1f0f17cc2a091cf2c9fb36bf553

Diese Schritte sind falsch. Das, was für eine P2SH-Adresse gehasht wird, ist das RedeemScript, nicht der scriptPubKey. Anstatt Schritt 3 auszuführen, würden Sie direkt zu Schritt 4 springen und anstelle des scriptPubKey das RedeemScript hashen.

Hallo Andreas, ich hatte gehofft, Sie könnten mir helfen. Ich glaube, ich erzeuge die Prüfsumme nicht richtig. Vor der base58-Codierung ist dies die Zeichenfolge, die ich habe: 05188ba16284702258959d8bb63bb9a5d979b5787555c30444. Nach base58 ist das 33voQqbNAYyig272KjcX8GkucWn2uJk5WT. Die letzten 6 Zeichen sind falsch. Welchen Teil verstehe ich falsch?
@ user2298995 Ihre Prüfsumme ist falsch. Das Hex sollte 05188BA16284702258959D8BB63BB9A5D979B57875BFE2FCFD lauten
Vielen Dank für Ihren Kommentar! Wie wird die Prüfsumme dann generiert? Ich habe die 4 Bytes von sha256(sha256(redeemScript)) genommen. Ist es nicht der richtige Weg?
Nein, es sind die ersten 4 Bytes des sha256 (sha256 (Payload)), wobei die Nutzlast die Daten sind, die Sie mit der base58-Prüfcodierung codieren. In diesem Fall lautet die Nutzlast 05188BA16284702258959D8BB63BB9A5D979B57875
Oh vielen Dank. Sehr geschätzt!