Manejo de eventos de otros contratos

Tengo 2 contratos. Un contrato es con el que estoy interactuando directamente.

El evento que quiero escuchar no lo desencadena el contrato principal, sino el que se llama internamente.

En el siguiente ejemplo, si invoco el método de "prueba", ¿cómo puedo escuchar "MyEvent" activado por el otro contrato?

contract OtherContract {

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

contract Test {

    OtherContract constant otherContract  = OtherContract(0x0b258ee7bf483bb49a5956407702ca5b08197b4c);

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

Respuestas (3)

Puede manejar esto con Web3 JavaScript API . Solo necesitaría hacer referencia a la instancia del contrato para el que le gustaría ver los eventos.

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

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

Consulte aquí para obtener información sobre los filtros .

Los contratos inteligentes no pueden ver eventos, de los documentos :

No se puede acceder a los datos de registro y eventos desde los contratos (ni siquiera desde el contrato que los creó).

Si desea que los contratos interactúen entre sí, deben llamarse directamente (como lo hizo con esta función otherContract.doSomething();)

Agregue un método y un evento en el contrato de prueba. El método debe escuchar el evento en Otro contrato y emitir el evento en el contrato de prueba. Escuche el evento del contrato de prueba desde su aplicación de llamadas.