web3.py Adresse manuell aus der Zeichenfolge des öffentlichen Schlüssels ableiten [für Dummies]

Nehmen wir an, ich muss die Adresse von einer öffentlichen Schlüsselzeichenfolge ableiten.0xbb8250cc01a0afa7dcaee987b2adda8d1b0a0bb2f7cc427bd942a98c7837364d62e6ea4728a99db39fd55a6f7474a159ca88a96b40279044a1349a2280c8cd43

Gemäß dieser Antwort hier muss ich:

  1. hash it: Ich habe diesen Online-Hash-Generator verwendet, weil die eingebaute Web3.sha3()Funktion aus irgendeinem Grund nicht denselben Wert zurückzugeben scheint und ich nicht weiß, wie ich die Eingabe für die soliditySha3()Funktion angeben soll.

Der Hash ist also jetzt:

>>> hash = a591d48139d1f97e701cc15cb42a35c0ba7abf1aa44cfc82cdba0033779719eb

  1. Schneiden Sie die ersten 20 Zeichen ab und fügen Sie 0xPräfix hinzu:

hash = "0x" + hash[24:] => 0xb42a35c0ba7abf1aa44cfc82cdba0033779719eb

Leider ist dies nicht die richtige Adresse. Die Adresse sollte sein0xD4aD2c314d60089654bf292874AC0488F3ee77bA

Was ist also der richtige Weg für Dummies, um die Adresse aus einer öffentlichen Schlüsselzeichenfolge abzuleiten?

Stellen Sie sicher, dass Sie die Bytes hashen, nicht das Hex als Zeichenfolge.

Antworten (1)

Schau mal hier: Ethereum meistern - Schlüssel und Adressen . Dieses Kapitel führt Schritt für Schritt durch den Prozess zum Ableiten des öffentlichen Schlüssels.

Ich denke, das Hauptproblem ist, dass der Online-Encoder keine Hex-Eingabe erwartet. Versuchen Sie es mit web3.js, das perfekt zu funktionieren scheint:

key = "0xbb8250cc01a0afa7dcaee987b2adda8d1b0a0bb2f7cc427bd942a98c7837364d62e6ea4728a99db39fd55a6f7474a159ca88a96b40279044a1349a2280c8cd43"

"0xbb8250cc01a0afa7dcaee987b2adda8d1b0a0bb2f7cc427bd942a98c7837364d62e6ea4728a99db39fd55a6f7474a159ca88a96b40279044a1349a2280c8cd43"

hash = web3.utils.keccak256(key)

"0x31e2c58dcae613b45af300b1d4ad2c314d60089654bf292874ac0488f3ee77ba"

address = "0x" + hash.slice(24+2)

"0xd4ad2c314d60089654bf292874ac0488f3ee77ba"

BEARBEITEN: Web3.py funktioniert bei mir auch gleich

>>> key = "0xbb8250cc01a0afa7dcaee987b2adda8d1b0a0bb2f7cc427bd942a98c7837364d62e6ea4728a99db39fd55a6f7474a159ca88a96b40279044a1349a2280c8cd43"
>>> hash = Web3.sha3(hexstr=key)
>>> address = Web3.toHex(hash[-20:])
>>> address

'0xd4ad2c314d60089654bf292874ac0488f3ee77ba'

defekter Link, typisch für eth
@qrtLs Ich habe den Link repariert