'web3.currentProvider.selectedAddress' is null with MetaMask

문제.


서명 거래를 발행하고 싶지만 코드 옆에 기밀 키를 기술하고 싶지 않습니다.
그래서 MetaMask의 웹 3을 사용하고 싶은데 왜 사용할 수 없는지 모르겠습니다.web3.currentProvider.selectedAddress의 반환값이 null로 변경됩니다.
물론 web3.eth.accounts[0]의 반환치도 undefined이다.

해결책


웹 사이트에서 액세스할 수 있도록 허용ethereum.enable()

까닭


버전 4.18 이후의 MetaMask에는 PrivacyMode라는 옵션이 추가된 것 같습니다.
그리고 7.0 이후 모든 사용자의 기본 설정은 Privacy Mode입니다.
따라서 기존의 초기화 방법에서는 메타마스크 계정에 접근할 수 없을 것 같다.
허가 전ethereumselectedAddress이고 허가 후는 수치다.
null 실행 후 팝업하여 허용 여부를 묻습니다.허락해 주시면 계좌 주소를 얻을 수 있습니다.

잡담


지금까지 ethereum.enable()처럼 공급자를 사용하여 웹 3을 초기화했습니다.
앞으로 window.web3 = new Web3(web3.currentProvider);처럼 초기화하는 게 좋을 것 같아요.자세한 내용은 공식 Doc 및 Medium을 참조하십시오.
그나저나 MetaMask 2020년 3월 14일까지 버전은 7.8이다.

참고 자료

  • Privacy Mode is now enabled by default - MetaMask - Medium
  • Getting Started | MetaMask Docs
  • MetaMask 개인 정보 보호 모드 및 Dapps 대응 - Yuya Sugano-Medium
  • Example provider enablement code for EIP-1102
  • 좋은 웹페이지 즐겨찾기