Как подписывать сообщения с помощью 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

Другие вопросы по тегам