web3py: Holen Sie sich den öffentlichen Schlüssel aus dem privaten Schlüssel (ohne vorherige Transaktion)

Gibt es eine Möglichkeit, mit web3.py den öffentlichen Schlüssel von einem privaten Schlüssel zu erhalten? Ich weiß, dass ich es bekommen könnte, indem ich eine mit diesem Schlüssel signierte Transaktion überprüfe, aber das funktioniert in diesem Beispiel nicht für mich.

Es sollte irgendwie zugänglich sein, da die Adresse davon abgeleitet wird. Es muss also einen internen Weg innerhalb von web3.py geben, um darauf zuzugreifen.

Leider gibt es in den Dokumenten keine Informationen darüber und alles, was ich gefunden habe, war diese Lösung für web3j, die nicht auf web3.py portierbar ist.

Antworten (1)

Wenn Sie den privaten Schlüssel in den öffentlichen Schlüssel konvertieren und nicht adressieren möchten, würde ich die Verwendung der eth-keys- Bibliothek empfehlen. Es befindet sich in den Abhängigkeiten der eth-account- Bibliothek, die sich in den Abhängigkeiten von web3py befindet.

Der private Schlüssel, der für die Kontoerstellung verwendet wird, besteht aus 64 hexadezimalen Zeichen (insgesamt 32 Bytes). Wenn Sie also einen privaten 32-Byte-Schlüssel haben, kann der öffentliche Schlüssel mit dem folgenden Code erworben werden:

>>> from eth_keys import keys
>>> pk = keys.PrivateKey(your_32bytes_private_key)
>>> print(pk.public_key)

Wenn Ihr privater Schlüssel eine Zeichenfolge mit 64 Zeichen ist, kann er mit dem folgenden Code in einen privaten 32-Byte-Schlüssel konvertiert werden:

>>> import codecs
>>> decoder = codecs.getdecoder("hex_codec")
>>> private_key_bytes = decoder(private_key_str)
Ein alternativer Einzeiler für die Hex-String-Konvertierung:Web3.toBytes(hexstr=private_key_str)