元遮罩鎖定功能如何工作?
有誰知道元遮罩鎖定功能是如何工作的?在某些 Dapp 中,您可以斷開錢包與 Dapp 本身的連接。但他們所做的只是將帳戶狀態更改為空字元串。
const [currentAccount, setCurrentAccount] = useState(""); const disconnectWallet = () => { try { setCurrentAccount(""); window.location.reload(false); } catch (error) { console.log(error); } };
像這樣的東西。但實際上,它只是將賬戶地址更改為空,因此 Dapp 無法再檢測到該賬戶。
你也可以在 Uniswap 中辨識出類似的行為。第一次連接 Dapp 時,它會詢問密碼。下次當你從 Dapp 斷開連接並連接時,它會直接連接,因為 uniswap 已經存在於連接的站點中。
就我而言,我想知道元遮罩“鎖”是如何工作的,是否可以模仿 Dapp 的鎖。
當您點擊
Lock
按鈕時,MetaMask 所做的是鎖定其密鑰環控制器並重置其狀態。那條線正在呼叫
keyringController.setLocked()
,你可以在這裡看到它在做什麼:https ://github.com/MetaMask/KeyringController/blob/main/index.js#L146MetaMask 使用
eth-keyring-controller
庫來管理使用者帳戶,使用密碼鎖定、解鎖等。因此,當它呼叫庫的setLocked
函式時eth-keyring-controller
,庫會重置它在記憶體中的所有資訊,如密碼、密鑰環等。 MetaMask 會相應地更新其 UI。請注意,為此,MetaMask 確實需要使用者的密碼和助記詞才能解鎖和管理帳戶。那麼,當你談論在你的 Dapp 中“模仿” MetaMask 的鎖定功能時,你是指從你的 Dapp 中管理使用者的密鑰環並能夠
unlock
和lock
他們進行操作嗎?我認為嘗試從 Dapp 管理使用者的秘密不是一個好主意。這是使用密碼解鎖帳戶的程式碼:https ://github.com/MetaMask/metamask-extension/blob/develop/app/scripts/metamask-controller.js#L2340
當 Dapp 連接到 MetaMask 時,MetaMask 會保留站點 URL 以及它可以訪問哪些帳戶的映射。當您
Lock
使用 MetaMask 時,它還會重置此映射並忘記它連接到的站點。