Wie generiert man eine native Segwit-Adresse und eine P2SH-Segwit-Adresse aus einem Standard-WIF?

Kann ich die Schritte zum Generieren einer nativen Segwit-Adresse aus einem Standard-WIF ausführen? Und die Schritte zum Generieren einer P2SH-Segwit-Adresse aus derselben WIF?

Wie unterscheiden sich diese beiden Formate und warum gibt es zwei? Ich habe gesehen, dass die P2SH-Version mit älteren Clients kompatibel ist, sind native Segwit-Adressen nicht?

Antworten (1)

wif -> privater Schlüssel

  • Verwenden Sie base58-decode, um die base58-Zeichenfolge in Bytes umzuwandeln
  • Entfernen Sie das erste Byte (Netzwerkbyte) und die letzten 4 Bytes (Prüfsumme). Der Rest ist der Schlüssel
  • Stellen Sie sicher, dass die ersten 4 Bytes des sha256(sha256(network byte || key)) gleich der Prüfsumme sind
  • Wenn der Schlüssel mit 0x01(komprimiert) endet, entfernen Sie das letzte Byte. Sie haben den privaten Schlüssel übrig

privater Schlüssel -> öffentlicher Schlüssel

  • Wandeln Sie den privaten Schlüssel in eine Ganzzahl um
  • Multiplizieren Sie mit dem Generatorpunkt secp256k1, um einen Punkt (x,y) auf der Kurve zu erhalten. Dies ist Ihr öffentlicher Schlüssel

  • Verschlüsseln Sie Ihren öffentlichen Schlüssel in einem komprimierten Format. Byte 0x03(wenn y ungerade ist) oder 0x02(wenn y gerade ist) gefolgt von x als 256-Bit-Integer

Öffentlicher Schlüssel -> P2WPKH-Adresse

  • Zeugenprogramm erstellen = reifmd160(sha256(öffentlicher Schlüssel))
  • Codieren Sie in bech32 , indem Sie das Witness-Programm bcals menschenlesbaren Teil und 0als Witness-Version bereitstellen

Öffentlicher Schlüssel -> P2SH-P2WPKH-Adresse

  • Zeugenprogramm erstellen = reifmd160(sha256(öffentlicher Schlüssel))
  • Erstellen Sie das Einlösungsskript = 0x0014<witness program>Zeugenversion + push20 + Zeugenprogramm
  • Berechnen Sie den Hash160 = reifemd160 (sha256 (Skript))
  • Stellen Sie dem Hash das Versionsbyte voran0x05
  • Berechne die Prüfsumme = sha256(sha256(Versionsbyte || scripthash ))
  • Base58-Codierung (Versionsbyte || Skripthash || erste 4 Bytes der Prüfsumme)

Wie unterscheiden sich diese beiden Formate und warum gibt es zwei? Ich habe gesehen, dass die P2SH-Version mit älteren Clients kompatibel ist, sind native Segwit-Adressen nicht?

Alte Clients können nicht an Segwit-Adressen senden, aber sie können an P2SH-Adressen und als Erweiterung an P2SH-P2WPKH senden

Gibt es ein Tool, mit dem ich beim Testen überprüfen kann, ob meine Segwit-Adressen korrekt sind?
@arshbot Ich verwende diese Python-Bibliothek (Haftungsausschluss: Ich habe sie geschrieben) github.com/mcdallas/cryptotools und es gibt auch dieses Online-Tool, aber es unterstützt nicht segwit gobittest.appspot.com