Digamos que necesito derivar la dirección de una cadena de clave pública.0xbb8250cc01a0afa7dcaee987b2adda8d1b0a0bb2f7cc427bd942a98c7837364d62e6ea4728a99db39fd55a6f7474a159ca88a96b40279044a1349a2280c8cd43
De acuerdo con esta respuesta aquí , necesito:
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
0x
prefijo: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?
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'
Raghav Sood