Konvertieren des xpub-Schlüssels in das Core-Format

Ich habe einige große Probleme, die ich ehrlich gesagt nicht verstehen kann. Wenn ich eine Brieftasche von Electrum generiere, sieht der öffentliche Schlüssel so aus:xpub661MyMwAqRbcG8Zah6TcX3QpP5yJApaXcyLK8CJcZkuYjczivsHxVL5qm9cw8BYLYehgFeddK5WrxhntpcvqJKTVg96dUVL9P7hZ7Kcvqvd

Wenn ich eine Wallet-Adresse von Bitcoin Core RPC generiere, sieht der öffentliche Schlüssel so aus:037acd3408dfb612a69204c5f5bafe2a326646398cdd16c85fedd65a4e96a28278

Wenn ich versuche, mit dieser Art von öffentlichen Schlüsseln eine Multisig-Adresse im Kern zu erstellen, erhalte ich einen Fehler:xpub661MyMwAqRbcG8Zah6TcX3QpP5yJApaXcyLK8CJcZkuYjczivsHxVL5qm9cw8BYLYehgFeddK5WrxhntpcvqJKTVg96dUVL9P7hZ7Kcvqvd

Wenn ich versuche, eine Multisig-Adresse im Kern (über PHP) mit dieser Art von öffentlichen Schlüsseln zu erstellen, funktioniert es:037acd3408dfb612a69204c5f5bafe2a326646398cdd16c85fedd65a4e96a28278

Ich bin super verwirrt.

Ich entwickle ein Multisig-System für Bitcoin, aber es scheint, dass ich es nicht tun kann, da die Clients fast immer diese Art von öffentlichem Schlüssel verwenden, der von Electrum generiert wird:xpub661MyMwAqRbcG8Zah6TcX3QpP5yJApaXcyLK8CJcZkuYjczivsHxVL5qm9cw8BYLYehgFeddK5WrxhntpcvqJKTVg96dUVL9P7hZ7Kcvqvd

Gibt es in PHP eine Art Konvertierungsmethode von dieser Art von öffentlichem Schlüssel: xpub661MyMwAqRbcG8Zah6TcX3QpP5yJApaXcyLK8CJcZkuYjczivsHxVL5qm9cw8BYLYehgFeddK5WrxhntpcvqJKTVg96dUVL9P7hZ7Kcvqvdzu dieser Art: 037acd3408dfb612a69204c5f5bafe2a326646398cdd16c85fedd65a4e96a28278? Ich versuche zu verstehen, was ich falsch mache

Vielen Dank für Ihre Zeit und hoffe auf eine Antwort!

Antworten (1)

Der öffentliche Schlüssel von electrum xpub661MyMwAqRbcG8Zah6TcX3QpP5yJApaXcyLK8CJcZkuYjczivsHxVL5qm9cw8BYLYehgFeddK5WrxhntpcvqJKTVg96dUVL9P7hZ7Kcvqvd ist ein erweiterter öffentlicher BIP32-Schlüssel . Dies kann verwendet werden, um untergeordnete Adressen abzuleiten.

Der öffentliche Schlüssel von Bitcoin-Core 037acd3408dfb612a69204c5f5bafe2a326646398cdd16c85fedd65a4e96a28278 ist eine Hex-Darstellung der komprimierten Form eines öffentlichen Schlüssels .

Um vom erweiterten in das komprimierte Format zu konvertieren, müssen Sie lediglich von Base58Check decodieren und die letzten 33 Bytes (32 für private Schlüssel) abrufen. Ich bin mir sicher, dass es eine Implementierung in PHP für die Base58Check-Decodierung gibt. Siehe BIP32 - Erweiterte Schlüsselserialisierung :

$ printf "xpub661MyMwAqRbcG8Zah6TcX3QpP5yJApaXcyLK8CJcZkuYjczivsHxVL5qm9cw8BYLYehgFeddK5WrxhntpcvqJKTVg96dUVL9P7hZ7Kcvqvd" | base58 -dc | xxd -p 0488b21e0000000000000000009f8b20f34eceef6ea60d35db00446763f7 dc76bd60ec8cf6fd63dc912499cbd4039edccce0e93f436a283947412378 8b33a28ed7ad7cffc3a130889f232344ad1c

Die letzten 33 Bytes stellen die Hex-Version des komprimierten öffentlichen Schlüssels dar (die letzten 32 Bytes für private Schlüssel).

039edccce0e93f436a2839474123788b33a28ed7ad7cffc3a130889f232344ad1c