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_keys
auf 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})
Sieht so aus, als müssten die Dokumente aktualisiert werden. publicKey
ist ein nicht standardmäßiger Schlüssel, der nur durch Parität zurückgegeben wird, glaube ich.
Shane Fontaine
pub_key = tx['publicKey']
?Chris
KeyError: 'publicKey'
.Shane Fontaine
print(tx)
?Chris
Schnitzer
Chris