web3.py deriva manualmente la dirección de la cadena de clave pública [para tontos]

Digamos que necesito derivar la dirección de una cadena de clave pública.0xbb8250cc01a0afa7dcaee987b2adda8d1b0a0bb2f7cc427bd942a98c7837364d62e6ea4728a99db39fd55a6f7474a159ca88a96b40279044a1349a2280c8cd43

De acuerdo con esta respuesta aquí , necesito:

  1. hash it: Usé este generador de hash en línea porque la Web3.sha3()función incorporada no parece devolver el mismo valor por alguna razón y no sé cómo especificar la entrada para la soliditySha3()función.

Entonces el hash es ahora:

>>> hash = a591d48139d1f97e701cc15cb42a35c0ba7abf1aa44cfc82cdba0033779719eb

  1. Corte los primeros 20 caracteres y agregue el 0xprefijo:

hash = "0x" + hash[24:] => 0xb42a35c0ba7abf1aa44cfc82cdba0033779719eb

Desafortunadamente, esta no es la dirección correcta. La dirección debe ser0xD4aD2c314d60089654bf292874AC0488F3ee77bA

Entonces, ¿cuál es la forma correcta para que los tontos obtengan la dirección de una cadena de clave pública?

Asegúrese de codificar los bytes, no el hexadecimal como una cadena.

Respuestas (1)

Echa un vistazo aquí: Mastering Ethereum - Keys and Addresses . Este capítulo recorre paso a paso el proceso para derivar la clave pública.

Creo que el problema principal es que el codificador en línea no espera una entrada hexadecimal. Intente usar web3.js que parece funcionar perfectamente:

key = "0xbb8250cc01a0afa7dcaee987b2adda8d1b0a0bb2f7cc427bd942a98c7837364d62e6ea4728a99db39fd55a6f7474a159ca88a96b40279044a1349a2280c8cd43"

"0xbb8250cc01a0afa7dcaee987b2adda8d1b0a0bb2f7cc427bd942a98c7837364d62e6ea4728a99db39fd55a6f7474a159ca88a96b40279044a1349a2280c8cd43"

hash = web3.utils.keccak256(key)

"0x31e2c58dcae613b45af300b1d4ad2c314d60089654bf292874ac0488f3ee77ba"

address = "0x" + hash.slice(24+2)

"0xd4ad2c314d60089654bf292874ac0488f3ee77ba"

EDITAR: Web3.py también funciona igual para mí

>>> key = "0xbb8250cc01a0afa7dcaee987b2adda8d1b0a0bb2f7cc427bd942a98c7837364d62e6ea4728a99db39fd55a6f7474a159ca88a96b40279044a1349a2280c8cd43"
>>> hash = Web3.sha3(hexstr=key)
>>> address = Web3.toHex(hash[-20:])
>>> address

'0xd4ad2c314d60089654bf292874ac0488f3ee77ba'

enlace roto, típico de eth
@qrtLs he arreglado el enlace