Las transacciones que transmito pueden ser manipuladas por cualquier persona que mire el mempool (más información aquí ).
Esto descarta el uso txid
para la identificación de transacciones.
¿Cómo puedo identificar mis transacciones para asegurarme de que mi aplicación las rastree, incluso si los txid
cambios en el momento en que la transacción se extrae en un bloque?
Este es un problema interesante, que ha sido estudiado y discutido bastante dentro de la comunidad bitcoin.
La forma básica de hacer esto es realizar un seguimiento de un TXID normalizado junto con el TXID real utilizado en el protocolo. Luego, para calcular la identificación normalizada de una transacción, la serializa:
La única advertencia es que esto no es necesario para las transacciones de coinbase, ya que scriptSig no es maleable (dado que ya está en un bloque) y no hay txid reales en las entradas. Tampoco desea eliminar el scriptSig de la transacción de coinbase porque contiene la altura del bloque (por BIP34), lo que garantiza que el TXID (y el TXID normalizado) serán únicos. Por lo tanto, para las transacciones de base de monedas, la identificación de la transacción normalizada es la misma que la identificación de la transacción (nTXID == TXID).
Nota: esto es mucho trabajo para realizar un seguimiento de las identificaciones normalizadas para cada transacción. Todavía no se ha implementado en Bitcoin Core, y la implementación de su propia versión puede llevar mucho tiempo.
Si puede garantizar que el conjunto de salidas en todas las transacciones dentro de su sistema será único (es decir, está usando nuevas direcciones de recepción y nuevas direcciones de cambio para cada transacción), entonces podría usar un hash del conjunto de salidas como un identificador único. Esto sería más específico para su caso de uso, como una solución temporal, mientras que Bitcoin Core aún no tiene soporte para identificaciones de transacciones normalizadas.
Algunos recursos adicionales:
Todavía puede usar el txid
para identificarlo en su base de datos. Solo debe asegurarse de esperar suficientes confirmaciones para confiar en la transacción y que otras partes no puedan "malearla". Si recibe 2 transacciones que tienen las mismas entradas/salidas pero diferentes identificadores de transacción, entonces simplemente conserva una (tal vez la primera) y descarta la otra. En otras palabras, identifica las transacciones como quieras, solo recuerda no confiar en las no confirmadas.
natanael