Web3js

元遮罩鎖定功能如何工作?

  • September 27, 2022

有誰知道元遮罩鎖定功能是如何工作的?在某些 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 所做的是鎖定其密鑰環控制器並重置其狀態。

檢查這一行:https ://github.com/MetaMask/metamask-extension/blob/develop/app/scripts/metamask-controller.js#L4331

那條線正在呼叫keyringController.setLocked(),你可以在這裡看到它在做什麼:https ://github.com/MetaMask/KeyringController/blob/main/index.js#L146

MetaMask 使用eth-keyring-controller庫來管理使用者帳戶,使用密碼鎖定、解鎖等。因此,當它呼叫庫的setLocked函式時eth-keyring-controller,庫會重置它在記憶體中的所有資訊,如密碼、密鑰環等。 MetaMask 會相應地更新其 UI。

請注意,為此,MetaMask 確實需要使用者的密碼和助記詞才能解鎖和管理帳戶。那麼,當你談論在你的 Dapp 中“模仿” MetaMask 的鎖定功能時,你是指從你的 Dapp 中管理使用者的密鑰環並能夠unlocklock他們進行操作嗎?我認為嘗試從 Dapp 管理使用者的秘密不是一個好主意。

這是使用密碼解鎖帳戶的程式碼:https ://github.com/MetaMask/metamask-extension/blob/develop/app/scripts/metamask-controller.js#L2340

當 Dapp 連接到 MetaMask 時,MetaMask 會保留站點 URL 以及它可以訪問哪些帳戶的映射。當您Lock使用 MetaMask 時,它還會重置此映射並忘記它連接到的站點。

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