ВЕБ3 | Импорт закрытого ключа с публичным адресом

Я создал несколько учетных записей с помощью некоторых команд personal.newAccount(), и созданные учетные записи были добавлены в список. Что я хочу сделать, так это получить закрытый ключ с открытым ключом, который у меня есть с функцией getAccount() из соображений безопасности.

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

web3.eth.getAccounts(); 
//["0x407d73d8a49eeb85d32cf465507dd71d507100c1"] 

Затем я хочу получить закрытый ключ с этим адресом, как показано ниже.

var publicKey = web3.eth.getAccounts();
var privateKey = extractPrivateKey(pulicKey); 

Есть ли способ сделать это с помощью web3? Есть ли способ получить доступ к хранилищу ключей в файле javascript? Мне нужно использовать функцию sendTransaction() в коде javascript, но для подписи требуется privateKey. Теперь я храню privateKey как статический, и я думаю, что это довольно опасно. Я пытаюсь скрыть открытый и закрытый ключ моего владельца в коде. Пожалуйста, дайте мне знать, если у кого-то есть отличная идея. Большое спасибо.


person rachel_hong    schedule 18.01.2018    source источник


Ответы (1)


Во-первых, эта строка кода var publicKey = web3.eth.getAccounts(); возвращает вам не открытый ключ, а массив адресов.

Вы можете использовать пакет npm keythereum. Он извлекает закрытый ключ из вашего файла хранилища ключей, передавая определенный адрес. Сначала вы используете функцию importFromFile для его импорта, а затем используете функцию recover для извлечения закрытого ключа.

Это будет выглядеть так:

var keystorePath = "/yourPathToTheKeystoreFile";

async function importPrivateKey(address) {
let methodName = ">>> [importPrivateKey]: ";
  try{

      var keyObject = await keythereum.importFromFile(address, keystorePath);

      var privateKey = await keythereum.recover(password, keyObject);

      return privateKey;


    }catch(e) {
      console.log(e);
      throw e;
    }
}

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

person MiDa    schedule 23.08.2019