¿Dónde y cómo se almacenan las transacciones sin procesar en la cadena de bloques?

Tengo entendido que las transacciones se almacenan en la cadena de bloques en formato de doble hash: es decir, SHA256 (SHA256 (transacción sin procesar)). Pero también es posible obtener acceso a la transacción sin procesar. Esto significa que los datos de transacción sin procesar deben almacenarse en algún lugar. Entonces, ¿dónde se almacenan los datos de transacción sin procesar, si no se almacenan en la cadena de bloques? ¿O mi declaración inicial era incorrecta sobre las transacciones almacenadas en formato de doble hash? No creo que los datos de transacción sin procesar se puedan extraer invirtiendo la operación de doble hash.

Respuestas (2)

Esta es una cuestión de definición.

La cadena de bloques no almacena nada, es una estructura de datos abstracta que los nodos de una red mantienen colectivamente. Esos nodos son los que almacenan cosas. Eso puede o no incluir los datos reales de la transacción, no importa.

La cadena de bloques de Bitcoin consta de encabezados de bloque vinculados a hash. Cada encabezado de bloque contiene el hash del encabezado de bloque anterior. Cada encabezado de bloque también contiene un hash de todos los hash de transacciones (a través de un árbol Merkle). Esos hashes de transacción obviamente son hashes de los datos de la transacción en sí.

Esa es una definición de la estructura en la que todos los nodos deben estar de acuerdo, porque involucra hashes, y esos hashes deben coincidir. Pero lo que realmente almacenan de eso es su propio negocio. Los nodos completos con historial no podado almacenarán todas las transacciones y todos los bloques. Los nodos podados pueden almacenar todas las transacciones y bloques hasta un punto particular en la historia. Los nodos más livianos solo pueden almacenar los encabezados de bloque más las transacciones en las que el usuario está interesado.

Entonces, la transacción sin procesar se almacena en los nodos (nodos completos al menos, y posiblemente podados) y cada transacción almacena una representación de doble hash de sus transacciones de entrada: bitcoin.stackexchange.com/questions/8443/…
Sí, las transacciones normalmente se serializan y almacenan de esa manera, pero de nuevo: no es necesario. La forma en que se almacenan las cosas depende del software del nodo individual. Por ejemplo, algún software utiliza una representación comprimida que puede omitir valores hash de entrada repetidos. Lo único que importa es cómo se define un txid, que es un doble SH256 de los datos de transacción en "serialización de red" que, de hecho, incluye los txid del tx anterior que creó los UTXO que se están gastando. Si en algún lugar puede almacenar las cosas de manera diferente, pero aún así está de acuerdo con ese hash, todo está bien.

formato de doble hash: es decir, SHA256 (SHA256 (transacción sin procesar))

Tu comprensión de esto es muy, muy incorrecta.

La estructura de datos almacenada en una cadena de bloques no tiene doble hash . En cambio, hay dos hashes almacenados en la estructura de datos.

en lugar SHA256(SHA256(rawtransaction))de Debe visualizar la estructura de datos de la cadena de bloques como:

struct Block {
    Transactions[] transactions;
    int256 nonce;
    int256 previousHash; // SHA256(previous.transactions + previous.nonce + previous.previousHash)
    int256 hash;         // SHA256(this.transactions + this.nonce + this.previousHash)
}

Puede ver que la estructura de datos está vinculada al bloque anterior al incluir el hash del bloque anterior como parte de sus propios datos. Esta es la parte de la "cadena" de blockchain. La definición de todo el conjunto de bloques es recursiva porque para calcular el hash del bloque anterior necesitas calcular el hash del bloque anterior y así sucesivamente hasta llegar al bloque de génesis.

Las transacciones comprometidas sin procesar son parte del bloque.

Mmm no. De hecho, el hashing doble se usa en blockchain. Puedo darle muchas referencias, por ejemplo, bitcoin.stackexchange.com/questions/8443/… . Sé cómo funciona la parte de la cadena de la cadena de bloques. La respuesta real es que (por ejemplo) en los enlaces de la transacción actual a las transacciones de entrada, la transacción actual almacena el hash doble de la transacción anterior. El hashing doble también se usa en otros lugares.
Nota: el ejemplo de la estructura de bloques que se da en esta respuesta funciona para brindar una comprensión básica, pero no es realmente precisa. Ver: en.bitcoin.it/wiki/Protocol_documentation#Block_Headers