Неужели нельзя написать js-функцию, которая принимает адрес и возвращает открытый ключ?

Мне трудно поверить, что нечто подобное невозможно, поскольку использование открытых/закрытых ключей является основным преимуществом цифровой идентификации.

Мне нужно написать функцию Javascript, чтобы получить адрес эфириума и вернуть его открытый ключ. Я знаю, как получить открытый ключ из подписи, но получить подпись транзакции сложнее, чем я думал, web3 не может вернуть ее, как мне кажется.

Могу ли я использовать что-то в ParityJS, чтобы получить хэш транзакции из учетной записи входного адреса и получить от нее подпись?

Кто-нибудь, пожалуйста, скажите мне, что это возможно, я теряю надежду...

Ответы (2)

Вы можете восстановить открытый ключ, только если у вас есть подпись. Чаще всего подпись можно найти в транзакции, поэтому вам нужно будет найти транзакцию, сделанную из этой учетной записи. Это сложный шаг, потому что, насколько мне известно, не существует простого API «получить список транзакций с этой учетной записи». Вам нужно будет просмотреть транзакции в диапазоне блоков, чтобы найти транзакцию.

Оттуда вы просто вызовете, eth_getTranscationByHashа затем восстановите открытый ключ из подписи ( r, s, и vзначения).

Спасибо за ввод, хотя эта функция не возвращает подпись транзакции ... Я подумал о том, чтобы попытаться сделать какой-то бэкэнд-хак, перейдя по URL-адресу etherscan входного eth-адреса и nparsing, чтобы найти хэш транзакции . Но это все еще не решает, что подписи транзакций не сохраняются и не возвращаются функциями getTransaction.
Он наверняка возвращает подпись: curl https://mainnet.infura.io -d '{"json_rpc": "2.0", "method": "eth_getTransactionByHash", "params": ["0x1ac7fead8f71a41c9aad091c92e76947a35c4a5fd3aa27e67d7db85b14b1dbd6"], "id": 0}'. (Просто случайная транзакция, которую я только что видел на etherscan.io.)
web3.eth.getTransaction('0x1ac7fead8f71a41c9aad091c92e76947a35c4a5fd3aa27e67d7db85b14b1dbd6', console.log);если вы используете web3.js.
API Etherscan выглядит так, как будто он выводит список транзакций для вас: etherscan.io/apis#accounts . Если вы готовы полагаться на этот API, этого вместе с eth_getTransactionByHashи a ethereumjs-utilдолжно ecrecoverбыть достаточно.
Круто спасибо попробую! Я думал о getTransaction() в web3. Не могли бы вы тогда знать ответ на мой следующий вопрос, можно ли использовать Metamask с web3 для доступа к закрытому ключу для расшифровки так же, как он используется для подписи?
Нет, я не думаю, что у MetaMask есть какие-то методы шифрования/дешифрования.
Просто чтобы быть абсолютно ясным, web3 getTransactionдаст вам подпись.

Адрес генерируется из открытого ключа, и это односторонний процесс. Таким образом, невозможно сгенерировать открытый ключ из адреса.