Estoy tratando de recuperar la clave pública de una dirección de una transacción. Estoy recibiendo la transacción a través detx = web3.eth.getTransaction('xxx')
De acuerdo con los documentos , la clave pública debe ser recuperable por pub_key = tx['publicKey']
. Pero cuando imprimo el diccionario tx no hay un campo clave para publicKey
. Qué
Estoy usando la última versión de web3.py.
Entonces, ¿cuál es la forma más fácil de obtener la clave pública?
Pensé en usar eth_keys
de la siguiente manera:
tx = web3.eth.getTransaction('xx')
r = tx['r']
s = tx['s']
v = tx['v'] - 27 # why?
r_hex = r.hex()[2:]
r_int = int(r_hex, 16)
s_hex = s.hex()[2:]
s_int = int(s_hex, 16)
sig = (v, r_int, s_int)
sig_obj = eth_keys.keys.Signature(None, sig)
mgs = ??? # what is the actual message?
pub_key = eth_keys.keys.ecdsa_recover(msg, sig_obj)
Pero estoy atascado en msg
. Cualquier ayuda es apreciada.
Estas son las claves del diccionario:
>>> list(tx.keys())
['blockHash', 'blockNumber', 'from', 'gas', 'gasPrice', 'hash', 'input', 'nonce', 'r', 's', 'to', 'transactionIndex', 'v', 'value']
Esta es la salida paraprint(tx)
AttributeDict({'blockHash': HexBytes('0x9cb5c78955ad7836ec07e0460d19a457be74cfe6ecec2ba8a0c29c5057648021'), 'blockNumber': 6539317, 'from': '0x99fe5D6383289CDD56e54Fc0bAF7F67c957A8888', 'gas': 66666, 'gasPrice': 66000000000, 'hash': HexBytes('0x863bb4888489d081e63108fe0af03b366637963599d91692f46abee6900e9c58'), 'input': '0xa9059cbb000000000000000000000000a83cdb20fe49ff56635e2c8712238b4e96c9c5460000000000000000000000000000000000000000000029c07070040f0c070000', 'nonce': 37433, 'r': HexBytes('0xfc865f013dad1aac4ed4b0ff05d084bbc4b0d75c93e35638e9a045d07efdfc93'), 's': HexBytes('0x080d7cdb3930be83e0dcf8473653f63eb583c2d0473fa2054e63a825539abc64'), 'to': '0x9064c91e51d7021A85AD96817e1432aBf6624470', 'transactionIndex': 0, 'v': 37, 'value': 0})
Parece que los documentos deben actualizarse. publicKey
es una clave no estándar devuelta solo por paridad, creo.
shane fontaine
pub_key = tx['publicKey']
?cris
KeyError: 'publicKey'
recibirshane fontaine
print(tx)
?cris
tallista
cris