WEB3 |使用公共地址

时间:2018-01-18 06:51:04

标签: private-key account web3js web3 geth

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

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

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

然后,我想通过以下方式获取具有该地址的私钥。

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

使用web3有没有办法做到这一点? 有没有办法访问javascript文件上的密钥库? 我必须在javascript代码中使用sendTransaction()函数,但它需要privateKey才能签名。现在我将privateKey存储为静态,我觉得这很危险。 我想知道在代码中隐藏我的所有者公钥和私钥。请让我知道如果有人有好主意。非常感谢。

1 个答案:

答案 0 :(得分: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函数的新参数,而无需将私钥存储在任何变量中。