Metamask

如何通過個人簽名驗證乙太坊賬戶?

  • September 21, 2021

我想使用她的乙太坊帳戶對使用者進行身份驗證。有幾個可用的展示和教程,例如Amaury 的,但是使用了已棄用的 web3 API:

web3.personal.sign(web3.fromUtf8("Hello from Toptal!"), web3.eth.coinbase, console.log);

MetaMask no longer injects web3. For details, see: https://docs.metamask.io/guide/provider-migration.html#replacing-window-web3

Uncaught TypeError: web3.personal is undefined

window.ethereum直接使用新的,它可以很好地連接到錢包提供商並檢索帳戶,例如:

const accounts = await ethereum.request({ method: 'eth_requestAccounts' });

但是,它並沒有eth_personalSignMetaMask 文件中建議的那樣真正公開:

  • eth_sendTransaction
  • eth_sign(不安全且不建議使用)
  • eth_personalSign
  • eth_signTypedData
const sig = await ethereum.request({ method: 'eth_personalSign', params: ['0x0', 'foo'] });

MetaMask - RPC 錯誤:方法“eth_personalSign”不存在/不可用。

如何通過乙太坊帳戶進行身份驗證personalSign

相反,我進行了試驗eth_sign,它至少通過 web3 提供程序並允許我在 MetaMask 中籤署消息。但是處理起來很麻煩,並且只會返回一個永遠掛起的承諾……

現在是personal_sign,不是eth_personalSign。它一直是personal_sign,它可能只是 Metamask 文件中的一個錯字。

const message = "Hello from Ethereum Stack Exchange!";
const accounts = await ethereum.request({ method: 'eth_requestAccounts' });
const account = accounts[0];
const signature = await ethereum.request({ method: 'personal_sign', params: [ message, account ] });

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