Convertir la clave xpub al formato central

Estoy experimentando algunos problemas importantes que, sinceramente, no puedo entender. Cuando estoy generando una billetera de Electrum, la clave pública se ve así:xpub661MyMwAqRbcG8Zah6TcX3QpP5yJApaXcyLK8CJcZkuYjczivsHxVL5qm9cw8BYLYehgFeddK5WrxhntpcvqJKTVg96dUVL9P7hZ7Kcvqvd

Cuando estoy generando una dirección de billetera desde bitcoin core rpc, la clave pública se ve así:037acd3408dfb612a69204c5f5bafe2a326646398cdd16c85fedd65a4e96a28278

Cuando intento crear una dirección multisig en el núcleo usando este tipo de claves públicas, obtengo un error:xpub661MyMwAqRbcG8Zah6TcX3QpP5yJApaXcyLK8CJcZkuYjczivsHxVL5qm9cw8BYLYehgFeddK5WrxhntpcvqJKTVg96dUVL9P7hZ7Kcvqvd

Cuando intento crear una dirección multisig en el núcleo (a través de PHP) usando este tipo de claves públicas, funciona:037acd3408dfb612a69204c5f5bafe2a326646398cdd16c85fedd65a4e96a28278

Estoy súper confundido.

Estoy desarrollando un sistema multisig para bitcoin, pero parece que no puedo hacerlo, ya que los clientes casi siempre usarán este tipo de clave pública generada desde Electrum:xpub661MyMwAqRbcG8Zah6TcX3QpP5yJApaXcyLK8CJcZkuYjczivsHxVL5qm9cw8BYLYehgFeddK5WrxhntpcvqJKTVg96dUVL9P7hZ7Kcvqvd

¿Hay algún tipo de forma de conversión en PHP de este tipo de clave pública: xpub661MyMwAqRbcG8Zah6TcX3QpP5yJApaXcyLK8CJcZkuYjczivsHxVL5qm9cw8BYLYehgFeddK5WrxhntpcvqJKTVg96dUVL9P7hZ7Kcvqvda este tipo 037acd3408dfb612a69204c5f5bafe2a326646398cdd16c85fedd65a4e96a28278:? Estoy tratando de entender lo que estoy haciendo mal

Gracias por su tiempo, y espero obtener una respuesta!

Respuestas (1)

La clave pública electrum xpub661MyMwAqRbcG8Zah6TcX3QpP5yJApaXcyLK8CJcZkuYjczivsHxVL5qm9cw8BYLYehgFeddK5WrxhntpcvqJKTVg96dUVL9P7hZ7Kcvqvd es una clave pública extendida BIP32 . Esto se puede usar para derivar direcciones secundarias.

La clave pública de Bitcoin-Core 037acd3408dfb612a69204c5f5bafe2a326646398cdd16c85fedd65a4e96a28278 es una representación hexadecimal de la forma comprimida de una clave pública .

Para convertir del formato extendido al comprimido, todo lo que necesita hacer es decodificar desde Base58Check y obtener los últimos 33 bytes (32 para claves privadas). Estoy seguro de que hay una implementación en PHP para la decodificación Base58Check. Ver BIP32 - Serialización de clave extendida :

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

Los últimos 33 bytes representan la versión hexadecimal de la clave pública comprimida (últimos 32 bytes para claves privadas).

039edccce0e93f436a2839474123788b33a28ed7ad7cffc3a130889f232344ad1c