Estoy tratando de escribir un script de python que pueda generar una nueva billetera para ese usuario, pero necesito poder mantener la clave privada.
Seguí esto: respuesta de desbordamiento de pila
y obtuve estos resultados:
import os
from ethereum import utils
key = utils.sha3(os.urandom(4096))
print key
Out[5]: 'L\xf7\x98\x06\xb9\xbe>?
c\x88\xd3\xa7\x05\xdd\xe8AtNe\xf3\xe7Pc\xed\xd8L~\\\xcc\rq\x18'
raw = utils.privtoaddr(key)
print raw
Out[7]:
'n\x98V8\x05\xa1\x05\x9b\x18\xca%\xb3\xed\xd0\xd5\xa9I\xf8\x97\x15'
add = utils.checksum_encode(raw)
print add
Out[9]: '0x6e98563805A1059B18ca25B3edd0d5a949f89715'
Por lo tanto, pude obtener una dirección, pero no estoy exactamente seguro de lo que estoy viendo aquí en las variables "clave" y "sin procesar".
El sistema operativo es Ubuntu 16.4, con Python 2.7.12
Tenga en cuenta que este es un pequeño proyecto personal para aprender, por lo que realmente no me importan los problemas de "seguridad".
Editar: pude usar esto para crear para hacer lo que necesitaba, dejaré esta pregunta abierta ya que todavía estoy interesado en mi primera forma. https://github.com/vkobel/ethereum-generate-wallet
Parece que estás en Python 2. Py2 representa bytes en una cadena codificada en latin-1. A veces verá caracteres ASCII, otras veces verá algo como \x18
lo que significa el byte 00011000, también conocido como 18 en hexadecimal, o 24 como un número entero. Una clave privada es solo un montón de bytes consecutivos.
raw
es la representación binaria de la dirección. La dirección en addr
es la representación de cadena hexadecimal (con suma de verificación definida en EIP-55 ). Tenga en cuenta la terminación de la dirección: 15
, que corresponde a \x15
en addr
.
También puede estar interesado en las características de web3.py v4 para la administración de claves privadas: http://web3py.readthedocs.io/en/latest/web3.eth.account.html
Parece que:
>>> from web3.auto import w3
>>> acct = w3.eth.account.create('KEYSMASH FJAFJKLDSKF7JKFDJ 1530')
>>> acct.address
'0x5ce9454909639D2D17A3F753ce7d93fa0b9aB12E'
>>> acct.privateKey
b"\xb2\\}\xb3\x1f\xee\xd9\x12''\xbf\t9\xdcv\x9a\x96VK-\xe4\xc4rm\x03[6\xec\xf1\xe5\xb3d"
Si desea ver la codificación hexadecimal de la clave privada, puede usar:
>>> acct.privateKey.hex()
'b25c7db31feed9122727bf0939dc769a96564b2de4c4726d035b36ecf1e5b364'
ron serruya
tallista