Не удается получить журналы событий с помощью MetaMask Web3

У меня нет проблем с получением событий с помощью этого кода:

contract.MyEvent({}, { fromBlock: 0 }).get((err, data) => console.log(data))

Но когда я использую точно такой же код в браузере, использующем MetaMask, обратный вызов никогда не запускается.

Делает ли MetaMask что-то, что предотвращает возвращение события? Я могу нормально вызывать функции, но не могу получать события.

Ответы (1)

Вы должны иметь возможность извлекать события из своего браузера таким же образом, как с помощью метамаски, так и с помощью web3, загруженного с использованием обычного Javascript.

Убедитесь, что вы тестируете один и тот же узел: получение журналов в широком диапазоне может быть довольно обременительным для узла, с которого вы извлекаете данные, поэтому не все общедоступные узлы будут возвращать их до истечения времени ожидания или вообще. Если это окажется проблемой, попробуйте уменьшить диапазон журналов, которые вы пытаетесь получить.

Также убедитесь, что web3 загружен, прежде чем начать его использовать. Обычно вы хотите проверить его доступность после события загрузки страницы и только тогда начать его использовать.

Наконец, у Metamask проблемы с переключением сетей. После переключения на сеть, которую вы хотите использовать, попробуйте закрыть все открытые окна Chrome (а не только окно, в котором вы используете Metamask), а затем снова откройте браузер с нуля.

Выход из моего браузера сработал! Великолепно! Имеет смысл, что это была проблема, поскольку на моем локальном узле буквально не было никаких указаний на то, что что-то произошло, и метамаска ничего не вернула (очевидно, мой локальный контракт не находится в сети, к которой он был подключен). Большое спасибо.
В MetaMask есть текущая ошибка в производстве, связанная с запросами событий, они периодически дают сбой, мы сейчас работаем над этим.
@DanF FWIW перезапуск моего браузера устранил проблему. LMK, если я могу помочь вам каким-либо другим образом