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?
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).
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)
ética
alert
es 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.máximo
ética
.sendTransaction()
solo llama a la devolución de llamada una vez (la devolución de llamada.new
es lo que se llama dos veces). ethereum.stackexchange.com/questions/7407/…