Как подписывать сообщения с помощью Web3 и MetaMask из приложения React

Я работаю над своим первым децентрализованным приложением и пытаюсь подписать сообщение с помощью 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);
    });
}

person Josh Gendein    schedule 11.02.2019    source источник


Ответы (1)


Metamask недавно внес изменения в способ раскрытия адресов пользователям. Я нашел сообщение StackOverflow, которое кажется связанным здесь. Цитировать:

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

person rickjerrity    schedule 11.02.2019
comment
Поправьте меня, если я ошибаюсь, но, основываясь на сообщении в блоге команды Metamask, мне не нужно вызывать window.ethereum.enable (); если у меня отключен приватный режим. Кроме того, что такое window.ethereum в этом контексте? У меня нет ничего подобного. - person Josh Gendein; 12.02.2019
comment
Также в статье под заголовком раздела Preparing your dapp говорится: As of MetaMask v4.14.0, the provider is already available at window.ethereum and it exposes the new enable method и dapps can and should be updated as soon as possible to call the new enable method to ensure compatibility with the upcoming change. window.ethereum должен быть вашим провайдером web3. Я хотел бы убедиться, что у вас установлена ​​последняя версия Metamask? Я согласен с настройкой режима конфиденциальности, но ничего не могу поделать. Возможно, лучше всего спросить об этом на бирже Ethereum. - person rickjerrity; 12.02.2019