¿Cómo puedo programar mi DApp para decirle a mi usuario que su acción/transacción ha sido confirmada?

Tome un ejemplo de una DApp de votación. Un usuario hace clic en un botón de voto, luego, detrás de escena, la transacción que contiene el voto se extrae en la cadena de bloques. Entonces, la DApp quiere alert('You have voted').

Dado que la transacción tarda un tiempo en minarse y obtener algunas confirmaciones, ¿qué código debe hacer la DApp antes de hacer el alert? He oído hablar de personas que ejecutan bucles y llaman getTransactionReceipt. ¿Es así como debería hacerse, o alternativas? ¿Hay fragmentos de código o bibliotecas para ellos?

Respuestas (2)

En web3.js, .sendTransaction()tiene una devolución de llamada.

https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethsendtransaction

Más información sobre la devolución de llamada: https://github.com/ethereum/wiki/wiki/JavaScript-API#using-callbacks

La devolución de llamada generalmente se llama dos veces, una cuando la transacción llega a la red y otra vez una vez que se ha extraído.

Además, alert()generalmente se desaconseja el uso de javascript, ya que es una llamada de bloqueo y va en contra de la naturaleza asíncrona de javascript. (Mejor sería usar una ventana emergente de Bootstrap, por ejemplo).

alertes solo para fines de ejemplo;) Votar a favor, pero los fragmentos de código serían más útiles para los lectores. Además, "la devolución de llamada generalmente se llama dos veces"? Sería útil un fragmento para detectar ambos casos.
A mí también me gustaría saber cómo llamar al correcto en el momento adecuado.
"La devolución de llamada generalmente se llama dos veces" es inexacto. .sendTransaction()solo llama a la devolución de llamada una vez (la devolución de llamada .newes lo que se llama dos veces). ethereum.stackexchange.com/questions/7407/…

He puesto a disposición un ejemplo de código de trabajo completo aquí para saber si su transacción ha sido minada:

¿Cómo sé cuándo me he quedado sin gasolina?

(También cuenta si te quedas sin gasolina :-)

Tenga en cuenta que si el nodo con el que está hablando no es confiable, no es 100% confiable. ¿Cómo sabes que no está mintiendo? Realmente debería verificar para asegurarse de que la transacción se extrajo en una muestra de nodos. AFAICT Todavía tengo que ver un código de ejemplo de esto en el mundo Ethereum. Hay tales ejemplos en bitcoin. Planeo implementar dicho código cuando vaya a producción (también conocido como usar dinero real)