Metamask

提示使用者登錄錢包

  • March 6, 2022

使用者已安裝錢包,但未登錄

下面的函式不會提示使用者登錄他們的錢包,它只是返回一個空數組。

 const getAccount = async () => {
   try {
     const acc = await window.ethereum.request({
       method: 'eth_accounts',
     });
     console.log(acc);
   } catch (err) {
     console.log('err');
   }
 };

但如果他們沒有安裝我想使用的鏈條,我會收到提示,為什麼?

 const installAndChangeToNet = async (): Promise<void> => {
   try {
     await window.ethereum.request({
       method: 'wallet_addEthereumChain',
       params: [
         {
           chainId: chainId,
           chainName: chainName,
           nativeCurrency: {
             name: name,
             symbol: symbol,
             decimals: decimals,
           },
           rpcUrls: [rpcUrls],
           blockExplorerUrls: [blockExplorerUrls],
         },
       ],
     });
     getAccount();
   } catch (err: any) {
     alert('err');
   }
 };

好問題,我認為問題在於您呼叫了錯誤的方法。如果您查看 Metamask 文件,您會發現:

元遮罩文件

const accounts = await ethereum.request({ method: 'eth_requestAccounts' });
const accounts = accounts[0];

因此,在第一行中,您從連接的錢包中請求賬戶,而在第二行中,您已經選擇了所需的賬戶。

也就是說,呼叫eth_requestAccounts可以訪問錢包和地址。

現在,在您呼叫的第二個中wallet_addEthereumChain。此方法用於將某些特定網路添加到錢包中,您可以在文件中閱讀更多資訊

引用自:https://ethereum.stackexchange.com/questions/123224