Interactuando con el contrato inteligente desde la aplicación Java (We3j)

Tengo muchas preguntas sobre el flujo de trabajo (secuencia) de la interacción con el contrato inteligente desde la aplicación Java, así que primero explicaré lo que he hecho y luego haré mis preguntas, y si tengo algún problema, házmelo saber.

1- Escribí un contrato inteligente 2- Use truffle para obtener el envoltorio java del contrato inteligente (contract.java) 3- Use testrpc para probar el contrato

Tengo 2 clases que usan cuentas testrpc (credenciales) para interactuar con el contrato inteligente y llamar a sus funciones

Cada clase (node1.java, node2.java) llama a una función en el contrato inteligente llamada (send) para enviar sus datos a la cadena.

He agregado un evento que se activa si los 2 nodos han enviado datos allí

Lo que no entiendo es cómo puedo dejar que el código Java (digamos MainProgram.class) siempre verifique ese evento. Debido a que necesito verificar si ambos nodos envían sus datos, llamaré a otra función para analizar estos datos.

Cómo puedo administrar, controlar y verificar qué transacciones se han realizado o no, me refiero a cómo puedo usar los eventos en el código de Java y dejar que el código se ejecute para siempre y verificar si este evento ocurre, actúe.

Espero poder explicar claramente lo que necesito.

Gracias de antemano.

Solo agregue una cosa más, si mi comprensión es correcta y necesito una clase MainProgram para controlar y verificar los eventos, entonces necesito usar una de las cuentas testrpc para ejecutar este código. Esto significa que este programa se considera como un nodo en la cadena y juega como administrador de la red, por lo que el contrato inteligente no es el control.
No soy desarrollador de Java, pero vea si esta respuesta aquí ethereum.stackexchange.com/a/41534/20357 le da una idea.

Respuestas (1)

En su contenedor de Java para cada tipo de evento en su SmartContract, habrá una función que se verá así:

public Observable<ApprovalEventResponse> approvalEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {

            ...                

            return typedResponse;
        }
    });
}

Puede suscribirse a este observable desde su código Java de la siguiente manera:

contract.approvalEventObservable(DefaultBlockParameter.valueOf("Earliest"),DefaultBlockParameter.valueOf("Latest")).asObservable().subscribe( event ->{
    System.out.prtinln(event._approver);
});

Esto reproducirá todos los eventos que hayan ocurrido e imprimirá el atributo de los eventos anteriores y también imprimirá nuevos eventos cuando ocurran.