Buscar un Dapp similar: encontrar la diferencia entre conjuntos de datos utilizando Merkle Tree

Estoy luchando con el proyecto de mi tesis. Necesito desarrollar una Đapp, que pueda

  1. almacenar una ID de consulta como un número entero y una gran matriz de cadenas (que en
    realidad es el resultado de una consulta a una base de datos, dada como un archivo CSV),
  2. si el usuario proporciona una ID y otro archivo CSV, la Đapp tiene que devolver los valores, que no coinciden con los almacenados en la cadena de bloques para la ID de consulta dada.

Por esta razón, se debe utilizar el trie Merkle Patricia modificado de Ethereum. Debería almacenar los valores del archivo CSV en un trie, donde los valores hash son las hojas y se procesan por pares una y otra vez, hasta llegar al hash raíz. Luego, si el usuario proporciona una identificación y un conjunto de datos, debo comparar el hash raíz del conjunto de datos con el almacenado en la cadena de bloques. Si no coinciden, tengo que comparar los hashes en el siguiente nivel. Basado en esta comparación, debo ir en la dirección, donde hay un desajuste y encontrar las hojas al final que no coinciden.

Realmente estoy atascado con eso y no estoy seguro de cómo debo proceder. ¿Debo implementar una función de almacenamiento y validación en Solidity? ¿O cuál es la forma correcta de empezar? Me encantaría ver una aplicación de muestra, que sea similar.

Respuestas (2)

Puede que le resulte útil mirar el contrato inteligente de zeppelin que verifica una prueba de merkle para una raíz y una hoja dadas;

https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/MerkleProof.sol

Entonces, probablemente no sea la solución más efectiva, pero decidí almacenar los datos en un mapping(uint256=>bytes32[])al final, donde el número entero es el ID de la consulta y la matriz de bytes contiene las filas codificadas. De esta manera, puedo obtener fácilmente la matriz de bytes que pertenece a una identificación determinada. Sin embargo, luego necesito iterar a través de toda la matriz para verificar cada entrada, pero no se me ocurrió una idea mejor.