Web3js
如何使用 Web3modal 斷開 MetaMask 錢包
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; }