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.
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.
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.
Bagazo
pieter wuille