Digamos que queremos confirmar que una transacción de valor tx
ha alcanzado cierta finalidad, que definimos como esperar 12 confirmaciones de bloque. Hacemos esto para reducir la probabilidad de tx
perderse debido a una bifurcación o que se incluya en un bloque tío.
Los ejemplos que he visto usar getBlock
y/o getTransaction
primero para asegurarme de que tx
se extrajeron en un bloque.
Luego esperan hasta que se hayan extraído 12 bloques nuevos y parecen usarlos getTransactionReceipt
para verificar si tx
todavía está en la cadena de bloques.
¿Hay alguna diferencia funcional en este contexto entre usar getTransaction
y getTransactionReceipt
verificar si tx
todavía tiene blockNumber
? Las implementaciones no parecen usar ninguno de los datos adicionales devueltos, getTransactionReceipt
lo que lo hace un poco confuso.
Digamos que ocurrió una bifurcación o tx
entró en un bloque huérfano antes de las 12 confirmaciones. ¿Significa esto que getTransaction
y getTransactionReceipt
devolverá nulo para la transacción o cómo se refleja esto en estas llamadas?
No, no hay diferencia en este caso, son esencialmente equivalentes. Si el tx está huérfano, deberían devolver null
, pero aún así debe verificar el número de bloque porque es posible que se haya agregado a la nueva cadena más tarde de lo esperado, dando menos probabilidad de finalización.
tx
de perderse en un tenedor? ¿Seguirán regresando los métodos null
o el número de bloque será null
? No estoy seguro si tx
quedarse huérfano cubre el caso del tenedor.tx
que el número de bloque inicial de puede cambiar entre la primera y la última llamada (después de 12 bloques)? Y además, ¿significa esto que se recomienda esperar bloques adicionales para cubrir la diferencia para llegar a 12 confirmaciones?(tx.blockNumber - eth.blockNumber) > 12
que tenga 12 confirmaciones.
Víctor Mezrín