Hexi

Hexi

Record my life

プログラムでMetaMask / Wagmi shimDisconnectを切断します。

最近、MetaMask の接続を切り替えられない問題について調査しました。以前は公式ドキュメントに対応する API が提供されていないと思っていましたが、後に Wagmi が shimDisconnect 機能を実験的にサポートしたことに気づきました。そのソースコードを調査し、ここに記録します!

問題の説明#

Dapp が MetaMask ウォレットに接続する際、Dapp がログアウトするとき、MetaMask はウォレットと現在のウェブサイトの接続を切断する API を提供していないため、次回ユーザーが再度ログインすると、アカウント選択画面が表示されなくなります。
詳細はこちら: https://github.com/MetaMask/metamask-extension/issues/8990

解決策#

問題に対する回答と wagmi の shimdisconnect 機能の実装を参考にしてください: https://github.com/wevm/wagmi/pull/616/files

以下は核心コードです。ログイン時に wallet_requestPermissions を呼び出してアカウント選択画面を表示し、その後 eth_requestAccounts を呼び出してユーザーが選択したアカウントを取得します。

const accounts = await window.ethereum.request({
    method: "wallet_requestPermissions",
    params: [{
        eth_accounts: {}
    }]
}).then(() => ethereum.request({
    method: 'eth_requestAccounts'
}))

const account = accounts[0]

考察#

  • MetaMask や OKX ウォレットはこの方法で要件を満たすことができますが、これはおそらくやむを得ない措置かもしれません。

  • 現在、ほとんどの Web3 ウォレットは programmatically disconnect をサポートしていません。その理由は何でしょうか?セキュリティ上の問題であれば、Dapp が自身とウォレットの接続状態を制御することは合理的であり、セキュリティ上の問題は存在しないはずです。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。