Работа с событиями из других контрактов

У меня 2 контракта. Один контракт — это тот, с которым я взаимодействую напрямую.

Событие, которое я хочу прослушать, инициируется не основным контрактом, а тем, которое вызывается внутри него.

В следующем примере, если я вызываю метод «тестирования», как я могу прослушивать «MyEvent», инициированный другим контрактом?

contract OtherContract {

event MyEvent(uint8);
function doSomething() {
         MyEvent(1);
    }
}

contract Test {

    OtherContract constant otherContract  = OtherContract(0x0b258ee7bf483bb49a5956407702ca5b08197b4c);

    function testing() {
         otherContract.doSomething();        
    }
}

Ответы (3)

Вы можете справиться с этим с помощью Web3 JavaScript API . Вам просто нужно будет сослаться на экземпляр контракта, для которого вы хотите отслеживать события.

var event = myContractInstance.MyEvent({parameters} [Filters])

// watch for changes
event.watch(function(error, result){
  if (!error)
    console.log(result);
});

См. здесь информацию о фильтрах .

Смарт-контракты не могут видеть события из документации :

Данные журнала и событий недоступны из контрактов (даже из контракта, в котором они были созданы).

Если вы хотите, чтобы контракты взаимодействовали друг с другом, они должны напрямую вызывать друг друга (как вы сделали с этой функцией otherContract.doSomething();).

Добавьте метод и событие в тестовый контракт. Метод должен прослушивать событие в другом контракте и генерировать событие в тестовом контракте. Прослушайте событие тестового контракта из вызывающего приложения.