Ist es wirklich nicht möglich, eine js-Funktion zu schreiben, die die Adresse übernimmt und den öffentlichen Schlüssel zurückgibt?

Ich kann kaum glauben, dass so etwas nicht möglich ist, da die Verwendung von öffentlichen/privaten Schlüsseln ein großer Vorteil digitaler Identitäten ist.

Ich muss eine Javascript-Funktion schreiben, um eine Ethereum-Adresse aufzunehmen und ihren öffentlichen Schlüssel zurückzugeben. Ich weiß, wie man den öffentlichen Schlüssel aus einer Signatur erhält, aber es ist schwieriger als ich dachte, eine Transaktionssignatur zu erhalten, web3 kann meines Erachtens keine zurückgeben.

Kann ich etwas in ParityJS verwenden, um einen Transaktions-Hash aus dem Eingabeadresskonto abzurufen und die Signatur davon zu erhalten?

Bitte sagt mir jemand, dass das möglich ist, ich verliere die Hoffnung...

Antworten (2)

Sie können einen öffentlichen Schlüssel nur wiederherstellen, wenn Sie eine Signatur haben. Der häufigste Ort, um eine Signatur zu finden, ist von einer Transaktion, also müssten Sie eine Transaktion finden, die von diesem Konto durchgeführt wurde. Dies ist der schwierige Schritt, da es meines Wissens nach keine einfache API zum Abrufen der Transaktionsliste von diesem Konto gibt. Sie müssten die Transaktionen in einer Reihe von Blöcken durchsuchen, um eine Transaktion zu finden.

Von dort würden Sie einfach aufrufen eth_getTranscationByHashund dann den öffentlichen Schlüssel aus der Signatur ( Werte , und ) rwiederherstellen s.v

Danke für die Eingabe, obwohl diese Funktion keine Transaktionssignatur zurückgibt ... Ich habe darüber nachgedacht, vielleicht zu versuchen, eine Art Backend-Hack durchzuführen, indem ich zur Etherscan-URL der eingegebenen Eth-Adresse gehe und nparsing, um einen Transaktions-Hash zu finden . Aber das löst immer noch nicht, dass Transaktionssignaturen nicht gespeichert und von getTransaction-Funktionen zurückgegeben werden
Es gibt mit Sicherheit die Signatur zurück: curl https://mainnet.infura.io -d '{"json_rpc": "2.0", "method": "eth_getTransactionByHash", "params": ["0x1ac7fead8f71a41c9aad091c92e76947a35c4a5fd3aa27e67d7db85b14b1dbd6"], "id": 0}'. (Nur eine zufällige Transaktion, die ich gerade auf etherscan.io gesehen habe.)
web3.eth.getTransaction('0x1ac7fead8f71a41c9aad091c92e76947a35c4a5fd3aa27e67d7db85b14b1dbd6', console.log);wenn Sie web3.js verwenden.
Die API von Etherscan sieht so aus, als würde sie Transaktionen für Sie auflisten: etherscan.io/apis#accounts . Wenn Sie bereit sind, sich auf diese API zu verlassen, sollte das zusammen mit und eth_getTransactionByHasha ausreichen. ethereumjs-utilecrecover
Super danke das werde ich versuchen! Ich dachte an getTransaction() von web3. Würden Sie dann die Antwort auf meine nächste Frage kennen, kann Metamask mit web3 verwendet werden, um auf den privaten Schlüssel zur Entschlüsselung zuzugreifen, so wie er zum Signieren verwendet wird?
Nein, ich glaube nicht, dass MetaMask irgendwelche Verschlüsselungs-/Entschlüsselungsmethoden hat.
Nur um ganz klar zu sein, web3's getTransactionwird Ihnen die Signatur besorgen.

Die Adresse wird aus dem öffentlichen Schlüssel generiert und ist ein Einwegprozess. Es ist also nicht möglich, aus einer Adresse einen öffentlichen Schlüssel zu generieren