Almacenamiento de datos estructurados en blockchain privada

La tarea.

Desarrollar un registro distribuido en la red blockchain que pueda almacenar datos públicos de ciertos objetos.

Por ejemplo:

{
  "id": 123456789012345,
  "title": "Big black box (not more than 100 characters)",
  "description": "not more than 255 characters",
  "serial_number": "SN4567RT12",
  "type": 4,
  "size": 50,
  "date_of_manufacture": 1531230018,
  "owner_local_id": 99856
}

La información podría complementarse en el futuro con datos como este:

{
  "id": 123456789012345,
  "arrived_to": "not more than 255 characters",
  "date": 1531230018
}

Los datos iniciales y los próximos adicionales deben formular un perfil de objeto común con el historial de todas las acciones.

Agregar un nuevo objeto o complementar un objeto existente debe costar una tarifa.

Tengo una red privada con Clique PoA en algunos VPS. Escribo datos en el campo de transacción inputData en JSON. Para buscar, escribí un indexador que recopila datos de la transacción a mysql db local.

¿Es esto normal o hay mejores formas de almacenar datos y manipularlos?

¿Cómo puedo establecer una tarifa para agregar un nuevo objeto, mediante un contrato inteligente o integrarlo en el algoritmo de transacción?

La estimación de la cantidad de objetos en producción es de aproximadamente 10-50 millones por año

Respuestas (1)

Siento que usar Blockchain para almacenar cantidades tan grandes de datos realmente no tiene sentido. ¡El costo sería prohibitivamente caro! Además, la cadena de bloques no está realmente destinada a usarse como una base de datos.

Por lo tanto, podría ser mejor usar IPFS/Swarm para almacenar los datos y agregar el hash de IPFS al contrato inteligente como administrador de registros.

Aquí hay una gran guía para ayudarlo a comprender cómo aprovechar IPFS para amplificar el poder de la cadena de bloques para el almacenamiento.

Solo para su información, la carga útil máxima que puede tener una transacción es de 32 KB
¡Gracias por tu respuesta! Pensé en usar IPFS para el almacenamiento, pero si usa un archivo único para cada objeto, eventualmente tendremos una gran cantidad de archivos pequeños, que deben indexarse ​​para buscar por parámetros. Creo que puede ser un problema en el futuro, ¿verdad? ¿Puede tener sentido usar OrbitDB que se basa en IPFS o algo parecido? ¿Qué opinas? Muy importante no solo almacenar datos sino también tener la posibilidad de usar esos datos.
Sí, OrbitDB parece prometedor. Pero aún no lo he usado. :)