web3py: Holen Sie sich den öffentlichen Schlüssel von der Transaktion

Ich versuche, den öffentlichen Schlüssel einer Adresse aus einer Transaktion abzurufen. Ich erhalte die Transaktion pertx = web3.eth.getTransaction('xxx')

Laut den Dokumenten sollte der öffentliche Schlüssel von abrufbar sein pub_key = tx['publicKey']. Aber wenn ich das TX-Wörterbuch drucke, gibt es kein Schlüsselfeld für publicKey. Was ist

Ich verwende die neueste Version von web3.py.

Was ist also der einfachste Weg, um an den öffentlichen Schlüssel zu kommen?

Ich dachte an die Verwendung eth_keysauf folgende Weise:

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)

Aber ich hänge fest msg. Jede Hilfe ist willkommen.

Dies sind die Schlüssel im Wörterbuch:

>>> list(tx.keys())
['blockHash', 'blockNumber', 'from', 'gas', 'gasPrice', 'hash', 'input', 'nonce', 'r', 's', 'to', 'transactionIndex', 'v', 'value']

Dies ist die Ausgabe fürprint(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})
Was ist Ihre Leistung, wenn Sie laufen pub_key = tx['publicKey']?
Ich bekomme nur KeyError: 'publicKey'.
Was passiert, wenn Sie print(tx)?
Ich habe die Frage bearbeitet und die Wörterbuchschlüssel hinzugefügt. Die Ausgabe passt hier nicht rein.
Mit welcher Art von Knoten verbinden Sie sich?
Ich benutze im Moment nur Infura. Aber normalerweise benutze ich Geth.

Antworten (1)

Sieht so aus, als müssten die Dokumente aktualisiert werden. publicKeyist ein nicht standardmäßiger Schlüssel, der nur durch Parität zurückgegeben wird, glaube ich.