web3py: obtener la clave pública de la transacción

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_keysde 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})
¿Cuál es tu salida cuando corres pub_key = tx['publicKey']?
acabo de KeyError: 'publicKey'recibir
¿Qué pasa si tú print(tx)?
Edité la pregunta y agregué las claves del diccionario. La salida no encaja aquí.
¿A qué tipo de nodo te estás conectando?
Solo estoy usando Infura en este momento. Pero normalmente estoy usando geth.

Respuestas (1)

Parece que los documentos deben actualizarse. publicKeyes una clave no estándar devuelta solo por paridad, creo.