У меня 2 контракта. Один контракт — это тот, с которым я взаимодействую напрямую.
Событие, которое я хочу прослушать, инициируется не основным контрактом, а тем, которое вызывается внутри него.
В следующем примере, если я вызываю метод «тестирования», как я могу прослушивать «MyEvent», инициированный другим контрактом?
contract OtherContract {
event MyEvent(uint8);
function doSomething() {
MyEvent(1);
}
}
contract Test {
OtherContract constant otherContract = OtherContract(0x0b258ee7bf483bb49a5956407702ca5b08197b4c);
function testing() {
otherContract.doSomething();
}
}
Вы можете справиться с этим с помощью Web3 JavaScript API . Вам просто нужно будет сослаться на экземпляр контракта, для которого вы хотите отслеживать события.
var event = myContractInstance.MyEvent({parameters} [Filters])
// watch for changes
event.watch(function(error, result){
if (!error)
console.log(result);
});
См. здесь информацию о фильтрах .
Смарт-контракты не могут видеть события из документации :
Данные журнала и событий недоступны из контрактов (даже из контракта, в котором они были созданы).
Если вы хотите, чтобы контракты взаимодействовали друг с другом, они должны напрямую вызывать друг друга (как вы сделали с этой функцией otherContract.doSomething();
).
Добавьте метод и событие в тестовый контракт. Метод должен прослушивать событие в другом контракте и генерировать событие в тестовом контракте. Прослушайте событие тестового контракта из вызывающего приложения.