LoginSignup
3
1

More than 3 years have passed since last update.

'web3.currentProvider.selectedAddress' is null with MetaMask

Last updated at Posted at 2020-04-13

問題

署名付きトランザクションを発行したいが、秘密鍵をコード側に記述したくない。
そこで、MetaMaskのweb3を使いたいが、なぜか使えない。
web3.currentProvider.selectedAddress の返り値がnullになってしまう。
当然、web3.eth.accounts[0] の返り値もundefined になる。

解決策

ethereum.enable() を実行して、Webサイトからのアクセスを許可する。

原因

バージョン4.18以降のMetaMaskでは、PrivacyModeというオプションが追加されたみたいです。
そして、7.0以降では全てのユーザにおいて、PrivacyModeがデフォルトの設定になっています。
そのため、従来の初期化方法では、MetaMaskのアカウントにアクセスができなくなっているようです。

許可前のethereumではselectedAddressnullですが、許可後は値が入っています。
スクリーンショット 2020-04-13 22.01.57.png
ethereum.enable()の実行後にポップアップで、許可するか聞かれます。許可すれば、アカウントアドレスを取得することができます。

余談

これまでは window.web3 = new Web3(web3.currentProvider); のようにプロバイダを使ってWeb3を初期化していましたが、
これからは window.web3 = new Web3(ethereum); のように初期化するのが、いいみたいです。詳しくは、公式DocやMediumを参照してください。

ちなみにMetaMaskは2020年3月14日時点でバージョン7.7.8のようです。

参考

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1