Web3js

使用來自 web3js 的 Metamask 的 RPC 提供程序的 ABI 呼叫

  • August 2, 2022

我想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,它提供快速可靠的節點!

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