我有一个实现ethers.js的应用程序。我用两种方法来创建钱包:new ethers.Wallet(privateKey, provider);和new ethers.Wallet.createRandom();
通过创建一个随机钱包,您似乎无法在导入私钥时给它提供provider。这很好,因为一旦您稍后登录并返回,并从私钥导入获得钱包fromEncryptedJson,以及创建随机钱包时,provider现在是undefined了。
最初来自导入帐户的wallet.provider在那里,但是在注销之后(加密钱包),然后重新登录,在从加密中获得钱包之后,没有定义provider。我需要在应用程序的稍后时间提供程序,例如使用wallet.getTransactionCount();方法,这使用提供程序,但是在重新登录后它是未定义的。如果我做了wallet.provider = provider,我不能重新分配这个值,因为它说它是只读的。
那么,当你不加密钱包的时候,有没有办法来设置提供者呢?
发布于 2018-12-04 17:20:04
编辑*
弄明白了。
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) => 添加提供者作为一个选项传入,但似乎是不可能的。因此,我将诉诸于我目前的工作,直到我能找到解决方案,如何得到供应商时,不加密钱包。
https://ethereum.stackexchange.com/questions/63551
复制相似问题