So erstellen Sie eine eigene Ethereum-Wallet

Ist es möglich, eine eigene Ethereum-Wallet ohne Metamask zu entwickeln, die sich mit dem Haupt-Ethereum-Netzwerk verbinden sollte? Genau wie in blockchain.info klickt der Benutzer auf das Konto, indem er einfach die E-Mail-Adresse und das Passwort eingibt. Ein Konto wird im Backend erstellt und die Wallet-Adresse wird an die E-Mail-Adresse gesendet. Um über Metamask auf meine Konten zuzugreifen, schreibe ich diesen Code.

    const provider = new HDWalletProvider(
  '12 mnemonics',
  'https://rinkeby.infura.io/authid',
);
const web3 = new Web3(provider);
const accounts = await web3.eth.getAccounts();

  console.log('Attempting to deploy contract from ', accounts[1]);

Habe die Antwort auf meine erste Frage 12 Mnemonics aber

Wie rufe ich eine kostenpflichtige Funktion auf, die ohne Metamaske in Solidität geschrieben ist? Ich habe hier eine neue Frage erstellt, wie man Transaktionen ohne Metamaske durchführt

Überprüfen Sie den standardmäßigen GAS-Preis und das Limit in web3js.

Antworten (2)

Jetzt ist meine Frage, wie ich die neuen 12 Mnemonics ohne Metamask dynamisch erhalten kann

Sie können das BIP39- npm-Paket verwenden, um mnemonische Zeichen zu generieren.

var mnemonic = bip39.generateMnemonic();

und verwenden Sie diese Mnemonik, um HD Wallet zu generieren.

vielen Dank für Ihren Kommentar. Was ich also verstehe, ist, wenn ich die Mnemonik aus dem BIP39-Paket erhalten kann, kann ich diese verwenden, um die Konten mit web3 abzurufen, und ich kann mich mit dem Ethereum-Hauptnetzwerk verbinden, indem ich die URL im hdwalletprovider ändere, die auf das Hauptnetzwerk zeigt, richtig?
Ja, tatsächlich wird diese 12-Wörter-Mnemonik verwendet, um einen Seed zu erstellen. Mit diesem Seed können Sie BIP 32 (HD Wallet) erstellen. Aber ich habe Metamask nicht verwendet.
Wie führen Sie Transaktionen mit diesen generierten Mnemoniken durch?

Wenn Sie web3 verwenden möchten, können Sie web3.eth.accounts.create([entropy]);Konten lokal generieren. Der Entropieparameter ist optional.

Es gibt so etwas zurück

{
    address: "0xb8CE9ab6943e0eCED004cDe8e3bBed6568B2Fa01",
    privateKey: "0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709",
    signTransaction: function(tx){...},
    sign: function(data){...},
    encrypt: function(password){...}
}

Sobald Sie dies getan haben, können Sie ETH an diese Adresse senden. Sie müssen die Adresse nicht mit dem Hauptnetzwerk (oder irgendeinem anderen Netzwerk) verbinden. Sie können gültige, echte Konten erstellen, während Sie offline sind. Es gibt keinen Registrierungs- / Anmelde- / Verbindungsvorgang. Das generierte Konto funktioniert in allen Ethereum-Netzwerken.

Danke für den Kommentar. Können Sie mir bitte ein klareres Beispiel geben. Was soll ich innerhalb der Entropie übergeben?. Und nachdem das Konto erstellt wurde, wie kann dieses Konto mit dem Hauptnetzwerk von Ethereum verbunden werden? damit ich echte Ether auf dieses Konto senden und Geld einzahlen kann.
entropyIch habe weitere Informationen über und Hauptnetzwerk hinzugefügt
Danke cleanunicorn für die Klarstellung. Erste Antwort, die ich habe. Nun ist meine nächste Frage, wie rufe ich eine bezahlbare Funktion in Solidität auf? Ich habe es versucht, indem ich so aufgerufen habe const accounts = await web3.eth.getAccounts(); await campaign.methods.contribute().send({ from: accounts[0], value: web3.utils.toWei('0.001, 'ether') }); Aber ich bekomme diesen Fehler "Eigengas zu niedrig". Früher mit der Metamask-Erweiterung wurde eine Bestätigung angefordert, wenn ich in der Metamaske auf „Senden“ klicke, dann war die Transaktion erfolgreich. Jetzt, da Metamask nicht da ist, erhalte ich einen Fehler.
Bitte erstellen Sie hierfür eine neue Frage