¿Cómo obtener eventos emitidos por transacciones internas?

Solidez:

contract A{
   event Invoked();
   function invoke() public returns(bool){
      Invoked();
      return true;
   }
}

contract B{
   function B() {
      new A().invoke()
   }
}

JavaScript:

const tx = await B.new()
assert(tx.logs.length == 0)

¿Cómo puedo obtener los eventos emitidos al Aprocesar la transacción?

Respuestas (1)

Puede escuchar A, pero primero necesitará la dirección. También puedes escuchar B.

contract A{
   event Invoked();
   function invoke() public returns(bool){
      Invoked();
      return true;
   }
}

contract B{
    event Created(address newContract);   
      function createA() public returns(addressCreated, bool invoked)) {
        A a = new A();
        Created(a);
        bool success = a.invoke();
        return (a, success);
   }
}

Espero eso ayude.

¿Cómo escucho solo los eventos emitidos durante esta transacción en A?
Puede escuchar eventos de B para descubrir las direcciones creadas y luego iniciar detectores de eventos para cada instancia de A. Terminará con múltiples detectores para Invoked sintonizados en diferentes direcciones de A.