¿Cómo almacenar prueba de almacenamiento en leveldb?

Quiero saber la estructura de trie de almacenamiento y su estructura de datos en leveldb, y leo solidity storage .

Todavía tengo preguntas?

  1. En el papel amarillo, dice que la raíz de almacenamiento es una asignación entre un entero de 256 bits y un entero de 256 bits, ¿este par de valores clave se almacena en leveldb?

  2. Si queremos almacenar un valor V en la prueba de almacenamiento de un contrato. Después del almacenamiento de solidez , cuento la clave K para V e inserto V usando K en el trie de almacenamiento (al igual que K es la dirección de la cuenta y V es el estado de la cuenta en el trie de estado). Luego actualice la raíz de almacenamiento como state trie. ¿Tengo razón?

  3. Si la pregunta 1 es correcta, ¿cuál es la clave real que usamos para almacenar V en leveldb, es K o K y algo después de SHA3? ¿Cómo podemos obtener el hash principal de algunos nodos de valor de hoja, simplemente use SHA3 (valor1, valor2, ...)?

Respuestas (1)

No soy un experto, pero permítanme compartir mi comprensión. Además, consulte esta pregunta: Ethereum Merkle Patricia Trie y Hashes

  1. El trie se almacena como pares de valores clave en levelDB. Cada hash (entero de 256 bits) le permite acceder a un nodo. El valor corresponde a un nodo codificado RLP (ver Apéndice D en papel amarillo para diferentes tipos de nodos).
  2. Si desea almacenar un nuevo Valor v, codifique el valor en RLP y determine la clave como se explica en getStorageAt . Luego inserta un nuevo nodo de hoja o actualiza uno existente. Por supuesto, todos los hashes de nodo de nivel superior dependientes hasta la raíz deben actualizarse.
  3. Como se explica en el almacenamiento de solidez , la clave real es el hash SHA3 basado en el índice de almacenamiento de la variable que está almacenando (para datos estáticos, el índice de almacenamiento, para asignaciones es keccak256(k . p))

Te recomiendo mirar también los siguientes enlaces:

Referencias: https://easythereentropy.wordpress.com/2014/06/04/understanding-the-ethereum-trie/ https://wanderer.github.io/ethereum/nodejs/code/2014/05/21/using- ethereums-tries-with-node/ https://github.com/medvedev1088/ethereum-merkle-patricia-trie-example https://medium.com/cybermiles/diving-into-ethereums-world-state-c893102030ed