web3py: obtener clave pública de clave privada (sin transacción previa)

¿Hay alguna forma de obtener la clave pública de una clave privada con web3.py? Sé que podría obtenerlo al verificar una transacción firmada por esa clave, pero eso no funciona para mí en este ejemplo.

Debe ser accesible de alguna manera ya que la dirección se deriva de él. Por lo tanto, debe haber una forma interna dentro de web3.py para acceder a él.

Lamentablemente, no hay información al respecto en los documentos y todo lo que encontré fue esta solución para web3j, que no es portátil para web3.py.

Respuestas (1)

Si desea convertir la clave privada en una clave pública y no una dirección, le recomendaría usar la biblioteca eth-keys . Está en las dependencias de la biblioteca eth-account , que está en las dependencias de web3py.

La clave privada, utilizada para la generación de cuentas, consta de 64 caracteres hexadecimales (32 bytes en total). Entonces, si tiene una clave privada de 32 bytes, la clave pública se puede adquirir con el siguiente código:

>>> from eth_keys import keys
>>> pk = keys.PrivateKey(your_32bytes_private_key)
>>> print(pk.public_key)

Si su clave privada es una cadena de 64 caracteres, puede convertirse en una clave privada de 32 bytes con el siguiente código:

>>> import codecs
>>> decoder = codecs.getdecoder("hex_codec")
>>> private_key_bytes = decoder(private_key_str)
Una línea alternativa para la conversión de cadenas hexadecimales:Web3.toBytes(hexstr=private_key_str)