Web3js
使用來自 web3js 的 Metamask 的 RPC 提供程序的 ABI 呼叫
我想
balanceOf
從 ERC20 智能合約中呼叫該方法。是否可以使用 Metamask 的 RPC 提供程序來做到這一點,還是我總是需要提供自己的主機?例如,以下範例執行良好,但我需要為我自己的主機提供我的 API 密鑰,我懷疑這對於公共 DApp 來說並不理想。
const erc20GetBalanceAbi: any = [ { constant: true, inputs: [{ name: '_owner', type: 'address' }], name: 'balanceOf', outputs: [{ name: 'balance', type: 'uint256' }], type: 'function' } ]; async function getErc20Balance(wallet: string, tokenAddress: string) { const web3 = new Web3(new Web3.providers.HttpProvider('https://my.personal.rpc?apikey=123')); const contract = new web3.eth.Contract(erc20GetBalanceAbi, tokenAddress); return = await contract.methods.balanceOf(wallet).call(); }
總結一下:有沒有辦法利用連接的 Metamask 帳戶來進行這種 ABI 函式呼叫?如果不是,在公共 DApp 上提供 RPC 主機的首選方式是什麼?
您應該使用錢包提供商連接到 RPC。例如在元遮罩中:
let provider = await detectEthereumProvider(); if (provider === window.ethereum) { let web3 = new Web3(provider); ....
是的,您必須自己提供。
MetaMask RPC 提供程序僅適用於 MM(在大聲笑之前,我嘗試在我的腳本中使用預設的 RPC 端點)。
您可以做的是使用一個
.evn
文件並將您的 RPC 端點作為環境變數導入,這樣您的 API 密鑰就不會暴露,如果使用私鑰或其他敏感資訊,您應該這樣做。不要忘記將
.env
文件包含在您的文件中.gitignore
,以免誤將其推送到網上!如果您需要關於優秀節點提供商的建議,我推薦Chainstack,它提供快速可靠的節點!