Как подписывать сообщения с помощью Web3 и MetaMask из приложения React
Я работаю над своим первым dapp, и я пытаюсь использовать Web3 и MetaMask для подписи сообщения, но я продолжаю получать эту ошибку:
inpage.js:1 MetaMask - RPC Error: Error: WalletMiddleware - Invalid "from" address.
У меня отключен режим конфиденциальности MetaMask. Метод getCoinBase() правильно возвращает адрес, который я выбрал в MetaMask. Но когда я пытаюсь использовать его для подписи сообщения, оно не работает.
Вот мой код: линии точек должны пропускать неважные фрагменты.
let Web3 = require('web3')
.
.
.
constructor(props) {
super(props);
if (typeof web3 != 'undefined') {
// eslint-disable-next-line no-undef
this.web3 = new Web3(web3.currentProvider);
}
this.web3.eth.getCoinbase()
.then(account => {
this.web3.eth.sign('test message', account);
});
}
2 ответа
const accounts = (await ethereum?.request({
method: "eth_requestAccounts",
})) as string[];
// account will be the signer of this message
const account = accounts[0];
const signedData = await ethereum?.request({
method: "personal_sign",
params: [
JSON.stringify(messageToSign),
account,
],
});
Метамаска недавно внесла изменения в то, как они показывают адреса для пользователей. Я нашел сообщение Stackru, которое, похоже, связано здесь. Цитировать:
The Invalid address error can also happen if you haven't called window.ethereum.enable(); yet.
Связанное сообщение в блоге от команды Metamask: https://medium.com/metamask/https-medium-com-metamask-breaking-change-injecting-web3-7722797916a8