Web3js

檢測目前提供者 int web3.js 的優雅方法

  • September 3, 2021

我想知道使用者正在使用哪個提供商(Metamaks、Mist ……),這樣我就可以提供更好的使用者體驗。 例如,提供有關如何解鎖帳戶的提示

我目前正在這樣做,但遠非優雅。有沒有更正確/可靠的方法來實現相同的目標?

getProviderName=()=>
{
   let providerName = "UNKNOWN"

   if(window.web3.currentProvider.constructor.name === "MetamaskInpageProvider")        
       providerName = "METAMASK"

   else if(window.web3.currentProvider.constructor.name === "EthereumProvider")        
       providerName = "MIST"

   else if(window.web3.currentProvider.constructor.name === "o")        
       providerName = "PARITY"

   else if(window.web3.currentProvider.host.indexOf("infura")!==-1) 
       providerName = "INFURA"      

   else if(window.web3.currentProvider.host.indexOf("localhost")!==-1)  
       providerName ="LOCALHOST"

   return providerName
}

這是我目前的實現:

getCurrentProvider() {
   if (!window.web3) return 'unknown';

   if (window.web3.currentProvider.isMetaMask)
       return 'metamask';

   if (window.web3.currentProvider.isTrust)
       return 'trust';

   if (window.web3.currentProvider.isGoWallet)
       return 'goWallet';

   if (window.web3.currentProvider.isAlphaWallet)
       return 'alphaWallet';

   if (window.web3.currentProvider.isStatus)
       return 'status';

   if (window.web3.currentProvider.isToshi)
       return 'coinbase';

   if (typeof window.__CIPHER__ !== 'undefined')
       return 'cipher';

   if (window.web3.currentProvider.constructor.name === 'EthereumProvider')
       return 'mist';

   if (window.web3.currentProvider.constructor.name === 'Web3FrameProvider')
       return 'parity';

   if (window.web3.currentProvider.host && window.web3.currentProvider.host.indexOf('infura') !== -1)
       return 'infura';

   if (window.web3.currentProvider.host && window.web3.currentProvider.host.indexOf('localhost') !== -1)
       return 'localhost';

   return 'unknown';
},

我自己也在尋找一種更好的方法,至少對於 metamask 我發現你可以做到這一點:

window.web3.currentProvider.isMetaMask

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