¿Cómo almacena la imagen en Ethereum Blockchain de manera eficiente? [duplicar]

No creo que tenga sentido almacenar la "imagen completa" en la cadena de bloques. Pensé que sería mejor almacenar una referencia a esa imagen, pero eso significa que el archivo de imagen real seguirá estando en un "almacenamiento centralizado" como s3.

¿Cuáles son las diferentes formas de almacenar una imagen en la cadena de bloques? ¿Y cuáles son las "formas conocidas" actualmente de almacenarlos eficientemente?

He visto proyectos como Filecoin, Storj, Tiesdb y muchos más, pero aún no estoy seguro de cuál sería la solución ideal. Quiero construir un álbum de imágenes basado en blockchain.

Posible respuesta a la pregunta.
@Grady Si mi ans está dando alguna dirección, por favor márquelo como aceptado.

Respuestas (1)

Sí tienes razón. Guardar la imagen completa en eth es muy costoso. Le sugiero que marque los almacenamientos de datos en cadena como IPFS o Swarm (la comunidad ethereum generalmente lo recomienda).

Hay API alternativas disponibles. Se mencionan dos servicios populares y la mayoría de los desarrolladores están usando. Ambos se distribuyen fuera de la cadena de almacenamiento.

Te sugiero que revises el siguiente enlace una vez.

Llegando a tu pregunta. Este es un ejemplo de cómo almacenar una referencia a una imagen, almacenada en IPFS, en un contrato inteligente de ethereum.

contract ImageInfo{
   mapping(address=>Image[]) private images;
   struct Image{
      string imageHash;
      string ipfsInfo;
   }
   function uploadImage(string hash, string ipfs) public{
       images[msg.sender].push(Image(hash,ipfs)); //
   }
}

El código anterior es solo para ilustración. Modifique la estructura de datos según sus requisitos. No he añadido ningún control de seguridad.

La idea es cargar primero la imagen en ipfs/swarm/cualquier otro almacén de datos fuera de la cadena, obtener el valor calculado hash de la imagen para contratar. Descargue datos (imagen) de la cadena y calcule el hash y verifique el hash guardado en el contrato.

Siento que la solución anterior es una de las mejores formas de manejar imágenes, porque todos los datos se distribuyen mediante una arquitectura sin servidor.