¿Dónde se almacenan los datos de estado?

Esta pregunta se hizo en Reddit hace un tiempo:

Sin embargo, ¿dónde se almacenan realmente los datos de estado? ¿En el disco duro de cada nodo? ¿Separado o dentro de la cadena de bloques? Reddit: Preguntas básicas sobre Ethereum EVM y State Storage

Este artículo escrito por mí proporciona una respuesta completa y clara a su pregunta. Como la explicación es detallada es mejor no copiar y pegar tanto contenido aquí.

Respuestas (3)

Conceptualmente, hay 2 componentes importantes de una cadena de bloques basada en cuentas:

  • las transacciones representan funciones de transición de estado
  • el resultado de estas funciones se puede almacenar

Un nodo "completo/de archivo" podría almacenar todas las transacciones y las transiciones de estado resultantes para todas las alturas de bloque en un almacén de datos local. Esto incluiría todos los estados históricos, incluso aquellos que ya no son válidos. Esto permite a los clientes consultar el estado de la cadena de bloques en cualquier momento del pasado sin tener que volver a calcular todo desde el principio. Es probable que esto requiera grandes cantidades de almacenamiento en disco y, debido a que no es estrictamente necesario, los datos de la cadena de bloques se pueden separar conceptualmente:

  • datos de la cadena (la lista de bloques que forman la cadena)
  • datos de estado (el resultado de la transición de estado de cada transacción)

Si bien se necesitarán todos los datos de la cadena para garantizar la cadena de custodia criptográfica y que no se haya manipulado nada, los datos de estado antiguos se pueden descartar (lo que se conoce como "poda"). Esto se debe a que los datos de estado son datos implícitos . Es decir, su valor se conoce solo a partir del cálculo, no de la información real comunicada. Por el contrario, los datos de la cadena son explícitos y se almacenan como la propia cadena de bloques.

Por lo tanto, actualmente, mientras que los datos de la cadena y del estado se almacenan localmente en el disco del nodo, solo los datos de la cadena son estrictamente necesarios. Los datos de estado pueden ser efímeros.

¿Es posible consultar a través de estos datos de estado?
Gracias por la respuesta. ¿Puedo preguntarte qué significa exactamente estado aquí? ¿Incluye el resultado del cálculo (actualización) realizado por un contrato? Por ejemplo, cuando un contrato mantiene un saldo y el saldo puede actualizarse mediante transacciones, ¿se almacenarían los datos actualizados en el almacenamiento local de los nodos?
@HenriqueBarcelos medium.com/aigang-network/… ¿es suficiente?
Entonces, ¿dónde está el almacenamiento por contrato?

Técnicamente, los estados se ensamblan en un árbol de estados (patricia-tree) vinculado a la cuenta (saldo en caso de EAO y saldo y almacenamiento en caso de cuenta de contrato) y a los bloques (cifras a continuación). Físicamente, los estados son parte de la cadena de bloques, por lo que puede encontrarlos en la carpeta .ethereum (en una base de datos leveldb) de cada nodo completo. Para obtener más detalles, visite este enlace .

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

@Badr Ballajtu enlace no funciona. Presumiblemente debería ser blog.ethereum.org/2015/06/26/state-tree-pruning .
¡Gracias! Entonces, ¿dónde se almacena el trie correspondiente "storageRoot" de una cuenta?

Fusión de pepitas de información de múltiples fuentes (principalmente, this y this ):

  1. Cada cliente de Ethereum (o nodo de Ethereum) almacena los datos de estado (junto con los saldos de cuenta, el código de contrato y el nonce de cuenta).
  2. La cadena de bloques de Ethereum incluye raíces de estado (una por bloque) que almacenan el hash raíz del árbol hash que representa el estado del sistema en el momento en que se generó el bloque.