Actualice dapp después de que se extraiga la transacción del contrato

Creé una aplicación web que interactúa con un contrato inteligente, utilizando el paquete web truffle unbox. Mi contrato tiene una variable llamada suma y 2 funciones: una llamada respuesta que incrementa la variable suma después de que se ejecuta y otra función llamada total que devuelve el valor de la variable suma. En mi app.js tengo el código:

SmartContract.deployed().then(function(contratoInstancia) {

contractInstance.answer(1, {gas: 140000, from: web3.eth.accounts[0]}).then(function(v) {
    return contractInstance.total.call().then(function(total){
                                    $("#total").html(total.toString());
            });
});

}

Mi pregunta es si la llamada contractInstansce.total se ejecutará después de que se extraiga la llamada de transacción contractInstance.answer, de modo que la variable total en mi index.html tenga el valor actualizado. También es necesaria la palabra "return" después de una llamada de transacción función, como respuesta en este ejemplo, para que la siguiente función de llamada de contrato, como total en este ejemplo, se ejecute después de que se extraiga la transacción?

Usé testrpc para probar si mi aplicación web funciona como se esperaba, pero en testrpc los bloques se extraen instantáneamente, por lo que no estoy seguro de si el código que escribí será correcto si uso esta aplicación en la red testnet.

¡Muchas gracias por su tiempo!

Respuestas (1)

Mi pregunta es si la llamada contractInstansce.total se ejecutará después de que se extraiga la transacción llamada contractInstance.answer.

No, contractInstance.answerdevolverá el hash de la transacción (que puede que aún no se haya extraído).

Considere usar la versión web3 1.0.x. Tiene eventos, que puedes escuchar http://web3js.readthedocs.io/en/1.0/web3-eth-contract.html?highlight=contract#id15

contractInstance.methods.answer().send({from: '_address'})
.on('transactionHash', function(hash){
    ...
})
.on('receipt', function(receipt){
    ...// your transaction is mined here
})
.on('confirmation', function(confirmationNumber, receipt){
    ...
})
.on('error', console.error);
En la página web dice que web3 1.0 aún no se ha lanzado. En mi proyecto de trufas en package.json dice web3 versión 0.20.0. Entonces, ¿su solución se aplicará a mi problema?
Verifique la última versión de web3 npm view web3, actualice su paquete.json con él e instálelo
Lamentablemente no pude actualizar. Traté de actualizar el paquete.json y luego ejecuté sudo npm install (como se menciona aquí [enlace] github.com/trufflesuite/truffle/issues/562 para una versión anterior) pero recibí muchos errores. Tal vez se deba a que usé truffle webpack para el proyecto. Entonces, ¿hay alguna forma en web0.20 de saber cuándo se devuelve el recibo y luego continuar con otra función de llamada al contrato actualizado?
Puede escuchar la transacción por su hash hasta que se extrae, como getTxCallBackla función aquí: ethereum.stackexchange.com/questions/18884/…
¿Sería una buena idea usar un evento dentro del contrato inteligente, que se activará justo después de que alguien establezca los nuevos valores, y luego usar el filtro para verificar ese evento? ¿Se ejecutará el código dentro de filter.watch después de que se extraiga la transacción?
@kathi No debería cambiar el código del contrato solo porque le facilita escribir una interfaz de usuario. El código de contrato principal debe contener solo la lógica comercial central.