Ethers js fügt Anbieter hinzu

Ich habe eine App, an der ich arbeite, um ethers.js zu implementieren. Es gibt zwei Methoden, die ich verwende, um eine Brieftasche zu erstellen: new ethers.Wallet(privateKey, provider);undnew ethers.Wallet.createRandom();

Beim Erstellen einer zufälligen Brieftasche scheint es nicht so, als könnten Sie ihr providerbeim Importieren eines privaten Schlüssels das Gleiche geben. Das ist in Ordnung, denn sobald Sie sich abmelden und zu einem späteren Zeitpunkt wieder anmelden und die Brieftasche erhalten , ist dies jetzt fromEncryptedJsonsowohl der Import des privaten Schlüssels als auch das Erstellen einer zufälligen Brieftascheproviderundefined

Anfangs wallet.providerist das Importkonto da, aber nach dem Abmelden (Verschlüsselung der Brieftasche) und dem erneuten Anmelden, nachdem die Brieftasche aus der Verschlüsselung geholt wurde, providerist nicht definiert. Ich brauche den Anbieter zu einem späteren Zeitpunkt in der App, zum Beispiel mit der Methode wallet.getTransactionCount();, dies verwendet den Anbieter, aber er ist nach dem erneuten Anmelden undefiniert. Und wenn ich das tue, kann wallet.provider = providerich diesen Wert nicht neu zuweisen, da er sagt, dass er nur gelesen werden kann.

Gibt es also eine Möglichkeit, den Anbieter festzulegen, wenn Sie die Brieftasche entschlüsseln?

Antworten (1)

**** BEARBEITEN ****

Herausgefunden.

ethers.Wallet.fromEncryptedJson(encryptedWallet, passphrase).then((myWallet) => {
    const loggedInWallet = myWallet.connect(provider);
    // loggedInWallet will now have provider added
}

Derzeit ist die einzige Lösung, die ich zur Arbeit bringen konnte, irgendwie hacky. Die Objektzuweisung scheint aus irgendeinem Grund nicht alle Schlüsselpaare zu kopieren. Ich habe Object.createdie Brieftasche einmal unverschlüsselt verwendet und weitergegeben.

const LoggedInWallet = Object.create(walletFromUnencryption);
LoggedInWallet.__proto__ = myWallet.__proto__;
LoggedInWallet._ethersType = myWallet._ethersType;
LoggedInWallet.provider = provider;
LoggedInWallet.signingKey = myWallet.signingKey;

Dadurch erhielt ich eine Brieftasche mit den erforderlichen Daten zur Verwendung, während der Benutzer angemeldet ist.

Nicht ideal, wie es scheint. Ich würde denken, wenn Sie die Brieftasche entschlüsseln, könnten Sie Folgendes tun:

ethers.Wallet.fromEncryptedJson(encryptedWallet, passphrase, provider).then((walletFromUnencryption) => 

Anbieter als Option hinzufügen, aber das scheint nicht möglich zu sein. Also werde ich auf das zurückgreifen, wofür ich jetzt arbeite, bis ich die Lösung gefunden habe, wie ich den Anbieter beim Entschlüsseln der Brieftasche bekomme