Событие солидности не вызывается - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь следить за событием на моем веб-интерфейсе, но мешает ошибка.

Вот JS, наблюдающий за событием

import web3 from './web3';

export async function callEvent () {
  await Contract.events.PracticeEvent().watch((response) => {
    console.log('the event has been called', response);
  }).catch((err) => {
    console.log(err);
  })

   await Contract.triggerEventFunc().call();
} 

Код контракта:

event PracticeEvent (string _message, uint _timestamp);

function checkEvent() public {
    emit PracticeEvent("event has been called", gts);
}

--- файл web3.js

import Web3 from 'web3';

const web3 = new Web3(window.web3.currentProvider);

export default web3;

Поэтому, когда я запускаю приложение, я получаю сообщение об ошибке

"Uncaught (в обещании) TypeError: Contract.default.events.PracticeEvent (...). Watch не является функцией"

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

Я предполагаю, что ошибка как-то связана с web3, но я не уверен, почему, потому что web3 работает нормально в остальной части моего приложения.

Любая помощь? спасибо!

1 Ответ

0 голосов
/ 14 ноября 2018

События могут передаваться только внутри транзакций.Вы делаете .call(), который просто читает данные из блокчейна и не может генерировать событие.

Если вы хотите, чтобы функция генерировала событие, вы должны заменить

await Contract.triggerEventFunc().call();

с

await Contract.triggerEventFunc().sendTransaction();

Это отправит транзакцию в цепочку блоков, и ее отправка будет стоить эфир.Внутри этой транзакции может быть сгенерировано событие, поэтому вы должны иметь возможность перехватить его с помощью web3.

...