Metamask
如何通過個人簽名驗證乙太坊賬戶?
我想使用她的乙太坊帳戶對使用者進行身份驗證。有幾個可用的展示和教程,例如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_personalSign
像MetaMask 文件中建議的那樣真正公開:
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 ] });