Ethers js добавление провайдера

У меня есть приложение, над которым я работаю, внедряя ethers.js. Есть два метода, которые я использую для создания кошелька: new ethers.Wallet(privateKey, provider);иnew ethers.Wallet.createRandom();

При создании случайного кошелька не похоже, что вы можете дать ему то же самое providerпри импорте закрытого ключа. Это нормально, потому что как только вы выйдете из системы и вернетесь позже и получите кошелек fromEncryptedJson, как из импорта закрытого ключа, так и из создания случайного кошелька provider, теперьundefined

Изначально wallet.providerиз импортного аккаунта есть, но после выхода из системы (шифрование кошелька) и последующего входа, после получения кошелька из шифрования, providerне определяется. Мне нужен провайдер позже в приложении, например, с помощью метода wallet.getTransactionCount();, который использует провайдера, но он не определен после повторного входа в систему. И если я это сделаю, wallet.provider = providerя не могу переназначить это значение, поскольку оно говорит, что оно только для чтения.

Итак, есть ли способ установить провайдера при расшифровке кошелька?

Ответы (1)

**** РЕДАКТИРОВАТЬ ****

Догадаться.

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

В настоящее время единственное решение, которое я смог приступить к работе, довольно хакерское. Назначение объекта по какой-то причине не копирует все пары ключей. Я использовал Object.createи передал в кошельке один раз незашифрованный.

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

Это дало мне кошелек с необходимыми данными для использования, когда пользователь вошел в систему.

Казалось бы, не идеально. Я бы подумал, что при расшифровке кошелька вы можете сделать что-то вроде:

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

добавление провайдера в качестве опции, но это не похоже на то, что это возможно. Поэтому я буду прибегать к тому, что у меня есть сейчас, пока не найду решение, как получить провайдера при расшифровке кошелька.