我如何检查是否使用ethers.js解锁元掩码或其他web3钱包
?我现在使用这个:
window.ethereum._metamask.isUnlocked()
但是在元掩码文档中它被报道为实验方法。
我的实验发现,listAccounts
返回一个字符串数组,如果钱包没有解锁,它返回一个空数组。
特别是对于MetaMask,我知道你不能没有地址就拥有一个帐户。
因此我想到的函数是:
async function isUnlocked() {
const provider = new ethers.providers.Web3Provider(window.ethereum);
let unlocked;
try {
const accounts = await provider.listAccounts();
unlocked = accounts.length > 0;
} catch (e) {
unlocked = false;
}
return unlocked;
}
这是我自己的分辨率,如果有人需要的话:
isUnlocked$ = new BehaviorSubject<boolean>(false);
async isWalletUnlocked() {
const web3Provider = new ethers.providers.Web3Provider(window.ethereum, 'any');
const signer = await this.web3Provider.getSigner();
signer
.getAddress()
.then((address: string) => {
this.isUnlocked$.next(true);
})
.catch((err) => this.isUnlocked$.next(false));
}