2

我用一些命令创建了几个帐户,personal.newAccount() 创建的帐户被推送到列表中。我想要做的是,出于getAccount()安全原因,使用具有功能的公钥获取私钥。

我不想显示我的所有者地址和公钥,所以我想使用该函数从列表中获取地址。

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

然后,我想像下面这样获取具有该地址的私钥。

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

有没有办法使用 web3 做到这一点?有什么方法可以访问 javascript 文件上的密钥库吗?我必须sendTransaction()在 javascript 代码中使用函数,但它需要 privateKey 来签名。现在我将 privateKey 存储为静态的,我认为这很危险。我想在代码中隐藏我的所有者公钥和私钥。如果有人有好主意,请告诉我。太感谢了。

4

1 回答 1

0

首先,这行代码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函数的新参数,而无需将私钥存储在任何变量中。

于 2019-08-23T08:19:17.780 回答