¿Cómo convierto una clave privada en hexadecimal en una clave privada Segwit esperada por Electrum?

He estado siguiendo este código para generar direcciones SegWit con python. Sin embargo, estoy confundido porque este script no genera la clave privada de una manera utilizable para Electrum.

Encontré este sitio que me dijo cómo convertir la clave a un WIF comprimido.

Aquí hay un ejemplo, ejecuté el script y obtuve este resultado:

Private key: ce534f3d1f481f8736c30d866a6b2c5defe5edc36afaafc0e923586791a2462b
Verifiction key: e5ee63efe153ebf1ec537831f2fba227f4b5f80275e750a9d0a8284c9fb4f91fb5427e034ffec25bacc346263f0f6281f951926f924f7c53f771f632ca9e3cbb
Compressed public key: 03e5ee63efe153ebf1ec537831f2fba227f4b5f80275e750a9d0a8284c9fb4f91f
keyhash: 17f022e2c24238760a0a1b070eaa456df4e8b915
Native address: bc1qzlcz9ckzggu8vzs2rvrsa2j9dh6w3wg4atezy6
P2WPKH_V0: 001417f022e2c24238760a0a1b070eaa456df4e8b915
Hashed P2WPKH_VO: b9502db522524782980563a09355fa7052ee7ff1
P2SH_P2WPKH_V0: a9b9502db522524782980563a09355fa7052ee7ff187
Checksum: 7fcb7c1d
Binary address: 05b9502db522524782980563a09355fa7052ee7ff17fcb7c1d
Nested address: 3JarywCp1dbFiykdGNWyo5pdZyvSLEGZ96

Luego agregué mi propio código adicional para convertir a WIF.

WIF: 5KP9tSHuzYd1WTCTwr5ewace9eNM8Kv8xjsWYyELHdEkKcQkiUZ
Compressed WIF: L48nE2detzZwEzdbw5dYTuNJy9wDqLVY92DwS7Br8NwgD6S8NiyT

Importé la clave WIF comprimida a Electrum, pero obtengo 13BaDNdBXkfrGkvJT41HNosBBbbLZRWyZJ como clave pública. Todo en línea confirma que solo las direcciones heredadas comienzan con un '1', pero seguramente es una dirección SegWit, ¿no?.

Cuando veo 'detalles', Electrum me da la clave pública comprimida correcta (03e5ee63efe153ebf1ec537831f2fba227f4b5f80275e750a9d0a8284c9fb4f91f).

¿Por qué Electrum no me da una dirección bech32 o una dirección anidada? ¿He hecho la conversión correcta de la clave privada?

Aquí está mi código en caso de que haya un error obvio de alguna manera.

fullkey = '80' + (private_key.hex())
sha256a = hashlib.sha256(binascii.unhexlify(fullkey)).hexdigest()
sha256b = hashlib.sha256(binascii.unhexlify(sha256a)).hexdigest()
WIF = base58.b58encode(binascii.unhexlify(fullkey+sha256b[:8]))

compressedPubKey = private_key.hex()+'01'
compressed_fullkey = '80' + (compressedPubKey)
compressed_sha256a = hashlib.sha256(binascii.unhexlify(compressed_fullkey)).hexdigest()
compressed_sha256b = hashlib.sha256(binascii.unhexlify(compressed_sha256a)).hexdigest()
compressed_WIF = base58.b58encode(binascii.unhexlify(compressed_fullkey+compressed_sha256b[:8]))
No sé nada sobre Electrum, pero la dirección 1... es una dirección P2PKH, no P2WPKH o P2SH-P2WPKH. Y no hay ninguna conversión para realizar en la clave; Las claves son claves, pero se pueden usar para construir varios tipos de direcciones. Presumiblemente, necesita alguna otra forma de informar a Electrum que desea una dirección P2WSH en lugar de una P2PKH.

Respuestas (1)

Importarlo especificando el tipo de dirección como prefijo:

TIPO DE GUIÓN:WIF COMPRIMIDO

En este ejemplo seráp2wpkh:L48nE2detzZwEzdbw5dYTuNJy9wDqLVY92DwS7Br8NwgD6S8NiyT

imp-priv-electrum

Verá la dirección: bc1qzlcz9ckzggu8vzs2rvrsa2j9dh6w3wg4atezy6agregada en la billetera

segwit-añadir

Muchas gracias, eres increíble, esto es exactamente lo que se necesitaba. Entonces, ¿qué tipo de dirección llamarías 13BaDNdBXkfrGkvJT41HNosBBbbLZRWyZJ? No puede ser Legacy, ¿verdad? ¿Estas direcciones son distintas, si envié monedas a bc1qzlcz9ckzggu8vzs2rvrsa2j9dh6w3wg4atezy6, no aparecerían también en 13BaDNdBXkfrGkvJT41HNosBBbbLZRWyZJ, verdad? Simplemente usan la misma clave privada para acceder a ambas direcciones, pero son diferentes debido al tipo de script. ¿He entendido bien?
13BaDNdBXkfrGkvJT41HNosBBbbLZRWyZJes p2pkh y también se llama dirección heredada. Sí, estas direcciones son distintas. Si BTC se envió a una dirección, no aparecerá para otra. Sí, necesita la misma clave privada para gastar desde ambas direcciones.