Web3js

使用 web3js 為 truffle/hdwallet-provider 提供的特定錢包檢索私鑰/公鑰

  • March 29, 2022

我找不到一種方法來檢索通過提供商載入的 web3 帳戶的私鑰/公鑰/公共地址。我已經嘗試了該web3.eth.accounts命令,但我沒有得到私鑰/公鑰/公共地址。

const web3 = new Web3(provider);
web3.eth.accounts

更詳細地說,我想要一個高畫質錢包,用於在不同的公鑰上接收乙太幣(然後出售它們)按照文件中的建議,我正在使用truffle/hdwallet-provider高畫質錢包。所以現在我正在嘗試通過 web3js 為通過創建的提供者檢索私鑰、公鑰和可能的公共地址truffle/hdwallet-provider wallet

這是我的程式碼,我每次在cmd.

在啟動節點控制台之前,我在關閉網際網路時啟動一個cmdgeth --rpc --rpcport 8545 這樣我就不必下載/同步區塊鏈

const mnemonicPhrase = 'some words ... '

const HDWalletProvider = require("@truffle/hdwallet-provider");
Web3 = require('web3');


provider = new HDWalletProvider({
 mnemonic: mnemonicPhrase,
 providerOrUrl: "http://localhost:8545",
 numberOfAddresses: 1,
 shareNonce: true,
 derivationPath: "m/44'/0'/0'/0/"
});

const web3 = new Web3(provider);
web3.eth.accounts

應該有一種方法可以通過 web3.eth.accounts 檢索私鑰/公鑰,但我只得到一個地址

非常感謝您的幫助!

  • 作業系統:windows
  • 乙太坊客戶端:
  • 松露版(truffle version):@truffle/hdwallet-provider@1.4.0 (web3@1.3.6)
  • 節點版本(node --version):v14.16.1
  • npm 版本 ( npm --version): 6.14.12

抱歉,web3 不檢索私鑰/公鑰

但是,您可以生成包含私鑰/公鑰的帳戶對象。

web3.eth.accounts.create();
> {
address: "0xb8CE9ab6943e0eCED004cDe8e3bBed6568B2Fa01",
privateKey: "0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709",
signTransaction: function(tx){...},
sign: function(data){...},
encrypt: function(password){...}

}

hd-wallet 將所有密鑰儲存在錢包變數中,您可以通過以下範例訪問。

provider = new HDWalletProvider({
 mnemonic: mnemonicPhrase,
 providerOrUrl: "http://localhost:8545",
 numberOfAddresses: 2,
 shareNonce: true,
 derivationPath: "m/44'/0'/0'/0/"
});
const web3 = new Web3(provider);
const wallets = provider.wallets;
var accounts = [];
for (const wallet in wallets) {
 let account = wallets[wallet];
 accounts.push({
   privateKey: account.privateKey.toString("hex"),
   publicKey: account.publicKey.toString("hex"),
   publicAddress: wallet,
 });
}

結果

[
 {
   privateKey: '8bdde4f02d6d6736bebd8s277ec89893be7be4c02e9ad5da38a8fca619986311',
   publicKey: '0414351013efd92a4aa932443548160bdeb1d56553efe5c50f8a75342ea2a71a96a12b5000a4b4ad3fe51d2075142cf8d7dce51a1a17b93eee447389ba0fc136d8',
   publicAddress: '0xE839836eC6Ef7Fac9f52e460B0A9DBD9342D806F'
 },
 {
   privateKey: '1745940f309220276d2e974415daf7ad08ca172ef3922bd241327b9cbc866f32',
   publicKey: '04ca9c29801acc74b5a9925efc47b590e1807f68c79eecacdc1f1c4e0e1b3af4717537f0ac7dbaa79569a4382943e03f8149f96a3198b18ce58593e132f399b659',
   publicAddress: '0xdB5C44A94705664904c2dB120A61345bEf76027e'
 },
]

引用自:https://ethereum.stackexchange.com/questions/102090