Seguimiento de datos de blockchain y conceptos inmutables

Supongamos que tengo una matriz de algunos datos, digamos
arr[15]="cualquier valor"
Si cambié este valor a cualquier otro valor
arr[15] = "valor cambiado"
¿Cómo puedo obtener el valor anterior de arr[15]= "cualquier valor"
Explique sobre la base del concepto inmutable de Blockchain
¿Hay alguna forma de programación sólida?

piense en cualquier variable como una pila que toma el último resultado pero todo el historial (estados anteriores) se guarda en la cadena de bloques

Respuestas (1)

Una copia completa de la cadena de bloques contiene un historial completo de todas las transacciones que alguna vez ocurrieron en su historial, por lo que los datos nunca se borran de un nodo que descarga todos los datos en cada bloque y los guarda sin eliminarlos. Entonces, si tiene una copia completa de la cadena de bloques, puede descubrir que arr[15]solía tener el valor "any value".

Sin embargo, en lo que respecta a un contrato de Solidity, el almacenamiento es como una base de datos normal: siempre ve el estado en el punto en que se ejecuta la transacción, que siempre es la punta de la cadena. Entonces, una vez que escribe un nuevo valor, el valor anterior desaparece. Diseñarlo así hace que sea mucho más económico ejecutar un nodo que pueda verificar un bloque: para verificar una transacción, solo necesita conocer el estado actual de la base de datos en ese momento en particular, que es muchas veces más pequeño que el historial completo. de estado en todos los momentos posibles del pasado. Eso le permite ejecutar un nodo con muchos menos datos de los que necesitaría si los contratos tuvieran acceso arbitrario al estado de la base de datos en bloques anteriores.

Aunque no es posible que un contrato lea los datos que ha sobrescrito o borrado, teóricamente es posible confirmar los datos de un bloque anterior. Si tiene un hash de bloque actual, debería poder probar que un hash de bloque anterior vino antes, y si tiene ese hash de bloque anterior, debería poder hacer una prueba Merkle que muestre que los datos estaban en la cadena de bloques en ese bloque anterior. Entonces, alguien con una copia completa de la cadena de bloques podría leer los datos en un bloque anterior, construir la prueba necesaria y enviar los datos, junto con los datos que prueban que son correctos, a su contrato. Sin embargo, no conozco ninguna implementación real de este método, y puede ser que los costos de gas para hacerlo lo hagan poco práctico.

En la práctica, si realmente necesita su contrato para poder acceder a los datos antiguos, normalmente solo tiene que pagar los costos de gasolina necesarios y pagar para mantener los datos históricos almacenados, de modo que nunca se eliminen de su contrato.

¿Quieres decir que si el minero establece el límite de gas en nulo, entonces podemos rastrear la transacción anterior? de lo contrario, ¿solo es posible para testnet, no para blockchain real? ¿Y la programación del contrato, cómo hacer eso?
Bueno, eso depende de la cantidad de almacenamiento que utilicen sus datos históricos. Por ejemplo, cada entrada podría almacenarse como un solo hash y podría hacer que la aplicación del usuario envíe el texto sin formato de la entrada como un parámetro de transacción cuando el contrato necesite procesarlo. En ese caso, una entrada es solo 32 bytes de almacenamiento, lo que generalmente no debería ser inviable con el precio actual del gas.
Vaya ! ya lo tengo Le agradecería que explicara cómo se realiza el registro y cuál es su fenómeno.
Creo que no entiendo su pregunta sobre los registros, pero parece una pregunta diferente, por lo que le sugiero que publique una nueva pregunta.