Web3js

如何使用 Web3modal 斷開 MetaMask 錢包

  • March 20, 2022
I am using metamask with kovan to connect to the wallet 
import React, { useState, useEffect} from 'react';
import Web3 from "web3";
import Web3Modal from "web3modal";
import Navbar from './components/navbar';

function App() {
const providerOptions = {};
const web3Modal = new Web3Modal({
 network: "mainnet", // optional
 cacheProvider: true, // optional
 providerOptions // required
});

 const [account, setAccount] = useState('');
 async function connect() {
   try {
     const provider = await web3Modal.connect();
     const web3 = new Web3(provider);
     const accounts = await web3.eth.getAccounts();
     setAccount(accounts[0]);
   } catch (err) {
     console.error(err);
   }
 }


 useEffect(() => {
   if (window.web3) {
     connect();
   }
 }, []);

  async function disconnect() {
   const clear = await web3Modal.clearCachedProvider();
 }

 return (
   <div>
    <Navbar account={account} connect={connect} disconnect={disconnect} />
   </div>
 );
}

export default App;

我如何斷開與元遮罩的連接?

這是不可能的。

由於安全和隱私問題,連接/斷開功能完全掌握在使用者手中。

您只能通過將提供者、chainId 和 selectedAccount 重置為 null 並清除您之前使用的提供的記憶體來假裝斷開連接。

PS:我知道這是一個殘酷的現實。贊成這個,因為它是唯一正確的答案!您必須從您的應用程序中假裝使用者已斷開連接。這就是我在我的 dapp 中的做法,PancakeSwap 的做法,Uniswap 的做法,等等……

我認為你可以做的是打電話:

 // TODO: Which providers have close method?
 if(provider.close) {
   await provider.close();

   // If the cached provider is not cleared,
   // WalletConnect will default to the existing session
   // and does not allow to re-scan the QR code with a new wallet.
   // Depending on your use case you may want or want not his behavior.
   await web3Modal.clearCachedProvider();
   provider = null;
 }

您還可以在此處找到範例

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