У меня есть приложение, над которым я работаю, внедряя ethers.js. Есть два метода, которые я использую для создания кошелька: new ethers.Wallet(privateKey, provider);
иnew ethers.Wallet.createRandom();
При создании случайного кошелька не похоже, что вы можете дать ему то же самое provider
при импорте закрытого ключа. Это нормально, потому что как только вы выйдете из системы и вернетесь позже и получите кошелек fromEncryptedJson
, как из импорта закрытого ключа, так и из создания случайного кошелька provider
, теперьundefined
Изначально wallet.provider
из импортного аккаунта есть, но после выхода из системы (шифрование кошелька) и последующего входа, после получения кошелька из шифрования, provider
не определяется. Мне нужен провайдер позже в приложении, например, с помощью метода wallet.getTransactionCount();
, который использует провайдера, но он не определен после повторного входа в систему. И если я это сделаю, wallet.provider = provider
я не могу переназначить это значение, поскольку оно говорит, что оно только для чтения.
Итак, есть ли способ установить провайдера при расшифровке кошелька?
**** РЕДАКТИРОВАТЬ ****
Догадаться.
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) =>
добавление провайдера в качестве опции, но это не похоже на то, что это возможно. Поэтому я буду прибегать к тому, что у меня есть сейчас, пока не найду решение, как получить провайдера при расшифровке кошелька.