连接到 MetaMask

“连接”或“登录”到 MetaMask 实际上意味着“访问用户的以太坊帐户”。

您应该发起连接请求以响应直接的用户操作,例如单击按钮。当连接请求未决时,您应该始终禁用“连接”按钮。您永远不应该在页面加载时发起连接请求。

我们建议您提供一个按钮以允许用户将 MetaMask 连接到您的 dapp。单击此按钮应调用以下方法:

ethereum.request({ method: 'eth_requestAccounts' });

例子:

<button class="enableEthereumButton">连接钱包</button>
const ethereumButton = document.querySelector('.enableEthereumButton');

ethereumButton.addEventListener('click', () => {
  //Will Start the metamask extension
  ethereum.request({ method: 'eth_requestAccounts' });
});

此承诺返回函数使用十六进制前缀的以太坊地址数组进行解析,可在发送交易时用作一般帐户参考。

随着时间的推移,此方法旨在增加各种附加参数,以帮助您的站点在设置期间向用户请求所需的所有设置。

由于它返回一个承诺,如果你在一个async函数中,你可以像这样登录:

const accounts = await ethereum.request({ method: 'eth_requestAccounts' });
const account = accounts[0];
// We currently only ever provide a single account,
// but the array gives us some room to grow.

例子:

<button class="enableEthereumButton">连接钱包</button>
<h2>Account: <span class="showAccount"></span></h2>
const ethereumButton = document.querySelector('.enableEthereumButton');
const showAccount = document.querySelector('.showAccount');

ethereumButton.addEventListener('click', () => {
  getAccount();
});

async function getAccount() {
  const accounts = await ethereum.request({ method: 'eth_requestAccounts' });
  const account = accounts[0];
  showAccount.innerHTML = account;
}

用户帐户在以太坊的各种环境中使用,包括作为标识符和用于签署交易。为了请求用户签名或让用户批准交易,必须能够访问用户的帐户。在wallet methods下面涉及的签名或交易的批准,所有需要发送帐户作为函数参数。一旦你连接到用户,可以随时通过检查再检查当前账户ethereum.selectedAddress

ethereum.on('accountsChanged', function (accounts) {
  // Time to reload your interface with accounts[0]!
});

如果返回数组中的第一个帐户不是您期望的帐户,您应该通知用户!将来,accounts 数组可能包含多个帐户。但是,数组中的第一个帐户将继续被视为用户的“选定”帐户。

发表评论

后才能评论