¿En qué orden aparecen las transacciones en un bloque? ¿Depende del minero?

Parece ser aleatorio o depende del minero por lo que puedo decir.

Pero para almacenar bloques, se debe mantener el orden de las transacciones (en alguna columna de posición, etc.) porque regenerar el bloque para su posterior recuperación requiere volver a colocar las transacciones en el mismo orden. ¿Es esto correcto?

La secuencia de bloques es fundamental (y se acomoda ya que cada bloque está encadenado a un bloque anterior específico), pero la secuencia de transacciones dentro de un solo bloque no lo es.

Respuestas (1)

La primera transacción tiene que ser la recompensa del minero . Las otras transacciones no pueden ser recompensas de mineros. Las transacciones deben aparecer después de cualquier transacción de la que dependan. Aparte de eso, la orden depende del minero. Cambiar el orden de las transacciones es una de las cosas que un minero puede hacer para cambiar el hash del bloque una vez que ha probado todos los valores posibles de nonce.

No sé a qué te refieres con tu "regeneración del bloque para su posterior recuperación". Que yo sepa, los bloques no se regeneran. Son creados por un minero, pasan por la red y se almacenan en el disco. No hay necesidad de regenerarlos.

Las transacciones pueden depender de otras transacciones. Por ejemplo, cuando gastas cambio de una salida anterior que aún no estaba confirmada. En este caso, ambas transacciones se pueden minar en los mismos bloques, pero la dependiente debe ser la última.
@PieterWuille Gracias. Actualicé mi respuesta en consecuencia.
Gracias Chris por tu respuesta, esto es útil. Para aclarar la regeneración del bloque, estoy pensando en almacenar los bloques en una base de datos relacional. En lugar de almacenar el árbol merkle en la base de datos (mancha gigante de texto), estoy almacenando el orden de las transacciones con una columna de posición en la tabla de transacciones. Entonces puedo regenerar el árbol merkle y no necesitaría duplicar todos los hashes tx. Pero todavía estoy debatiendo... mantener el árbol merkle en la tabla de bloques anularía la necesidad de regenerarlo cada vez y almacenar la posición de tx.
Bien, necesitará tener una columna que almacene el orden de las transacciones. Cuando 'regenera' el bloque de su base de datos y se lo pasa a un par, el par querrá poder codificarlo y asegurarse de que el hash sea menor que el objetivo requerido, que no será si ha reordenado el actas.
@BrianArmstrong: no recomendaría tratar de convertir el bloque a ningún otro formato y esperar poder regenerar perfectamente el bloque. A menos que esté utilizando un protocolo diseñado específicamente para ser distinguido, siempre existe el riesgo de que algo inusual en el bloque interrumpa su intento de regenerarlo. Mi consejo sería almacenar el bloque como está o no intentar regenerarlo.
¿Cómo se especifican esas dependencias entre transacciones? ¿Cómo sabe un minero acerca de las dependencias?