Ich kann keine Möglichkeit finden, den privaten Schlüssel / öffentlichen Schlüssel / die öffentliche Adresse für ein über einen Anbieter geladenes Web3-Konto abzurufen. Ich habe den web3.eth.accounts
Befehl ausprobiert, erhalte aber keinen privaten Schlüssel/öffentlichen Schlüssel/öffentliche Adresse.
const web3 = new Web3(provider);
web3.eth.accounts
Genauer gesagt hätte ich gerne eine HD-Brieftasche, um Ether auf verschiedenen öffentlichen Schlüsseln zu empfangen (und sie später zu verkaufen). Den Ratschlägen im Dokument folgend , verwende ich truffle/hdwallet-provider
für die HD-Brieftasche. Also versuche ich jetzt, den privaten Schlüssel, den öffentlichen Schlüssel und möglicherweise die öffentliche Adresse über web3js für den erstellten Anbieter abzurufentruffle/hdwallet-provider wallet
Dies ist mein Code, den ich jedes Mal mehrmals in einer neuen Knotenkonsole in einer cmd
.
Bevor ich die Node-Konsole starte, starte ich ein cmd
mit geth --rpc --rpcport 8545
, während das Internet ausgeschaltet ist, damit ich die Blockchain nicht herunterladen/synchronisieren muss
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
Es sollte eine Möglichkeit geben, den privaten/öffentlichen Schlüssel über web3.eth.accounts abzurufen, aber ich erhalte nur eine einzige Adresse
Vielen Dank für Ihre Hilfe!
truffle version
): @truffle/hdwallet-provider@1.4.0 (web3@1.3.6)node --version
): v14.16.1npm --version
): 6.14.12hd-wallet speichert alle Schlüssel in der Wallet-Variablen, auf die Sie dann anhand des folgenden Beispiels zugreifen können.
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,
});
}
Ergebnis
[
{
privateKey: '8bdde4f02d6d6736bebd8s277ec89893be7be4c02e9ad5da38a8fca619986311',
publicKey: '0414351013efd92a4aa932443548160bdeb1d56553efe5c50f8a75342ea2a71a96a12b5000a4b4ad3fe51d2075142cf8d7dce51a1a17b93eee447389ba0fc136d8',
publicAddress: '0xE839836eC6Ef7Fac9f52e460B0A9DBD9342D806F'
},
{
privateKey: '1745940f309220276d2e974415daf7ad08ca172ef3922bd241327b9cbc866f32',
publicKey: '04ca9c29801acc74b5a9925efc47b590e1807f68c79eecacdc1f1c4e0e1b3af4717537f0ac7dbaa79569a4382943e03f8149f96a3198b18ce58593e132f399b659',
publicAddress: '0xdB5C44A94705664904c2dB120A61345bEf76027e'
},
]
Entschuldigung, web3 ruft keine privaten/öffentlichen Schlüssel ab
Sie können jedoch ein Kontoobjekt generieren, das einen privaten/öffentlichen Schlüssel enthält.
web3.eth.accounts.create();
> {
address: "0xb8CE9ab6943e0eCED004cDe8e3bBed6568B2Fa01",
privateKey: "0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709",
signTransaction: function(tx){...},
sign: function(data){...},
encrypt: function(password){...}
}
J. tut