Metamask

在 Angular 應用程序中使用乙太監聽元遮罩事件

  • December 4, 2021

我正在建構一個 Angular 應用程序,它通過元遮罩連接到各種區塊鏈帳戶。我的一項服務通過使用獲取提供者和簽名者連接到 MetaMask

this.myProvider = new ethers.providers.Web3Provider(window.ethereum);
this.mySigner = this.myProvider.getSigner();

我希望我的服務能夠知道使用者何時切換帳戶或鏈,或退出元遮罩,並且我正試圖找到一種方法來在這些事件發生時通知它們。

我看到返回myProvider的對像是一個 Web3Provider,它包含一個帶有addListener2 個參數的方法,一個EventType和一個Listener,但我找不到任何關於如何訪問有效事件類型或如何設置偵聽器的文件我假設這些事件可能會提供我正在尋找的東西。有人可以指出如何使用這些事件和偵聽器的範例嗎?

這些事件是提供者 API 的EIP-1193定義的一部分,如果我理解正確,它們不是 ethers.js 或 web3.js 的一部分。這裡也有一個很好的文件。

因此,要訪問它們,您需要直接呼叫window.ethereumMetamask 注入的那個。

window.ethereum.on("accountsChanged", (accounts) => {
/* do what you want here */
})

類似地觀察鏈條變化:

window.ethereum.on("chainChanged", (chainId) => {
/* do what you want here */
/* full refresh is recommended */
})

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