¿Cómo almacenar una base de datos pequeña, datos editables en blockchain accesibles por contrato inteligente?

Nuevo en blockchain y contratos inteligentes. He estado investigando y me doy cuenta de que no puedo actualizar mi contrato inteligente de transacciones. ¿Es posible almacenar datos de la base de datos como una entrada en el libro mayor o en otro contrato inteligente al que solo yo actualizo que el contrato inteligente de transacciones puede acceder para extraer los datos?

Por ejemplo

El usuario quiere hacer un pago de donación a una organización. Su billetera necesita atraer todas las organizaciones posibles para que él elija de una base de datos que me gustaría descentralizar.

¿Dónde puedo almacenar las organizaciones y su dirección de billetera, así como actualizarlas o eliminarlas? También quiero agregar subsecciones de una organización y su dirección.

Por ejemplo

La billetera del usuario ingresa:

  • hospital, dirección
  • Hospital, laboratorio, dirección,
  • Hospital, Urgencias, dirección
  • cuerpo de bomberos, dirección
  • Cuerpo de bomberos, fondo de equipo, dirección
  • Cuerpo de bomberos, fondo de suministros, dirección
  • Etc.

Leería el único que agrega organizaciones y las elimina. ¿Hay alguna manera de hacer todo esto descentralizado dentro de la cadena de bloques?

cris

Respuestas (1)

Los contratos inteligentes pueden tener matrices y mapas como estructuras de datos que almacenan el estado de forma permanente en la cadena de bloques, y las funciones del contrato inteligente pueden modificarlos.

Para tu ejemplo, podrías usar algo como esto:

pragma solidity ^0.4.16;

contract MyOrgDatabase {
  struct Organization {
    address _where;
    string _name;
  }
  Organization[] public availableOrgs;
  address public owner = msg.sender;

  function addOrg(address _where, string _name) {
    require(msg.sender == owner);
    availableOrgs.push(Organization(_where, _name));
  }
}

Ese contrato tiene una availableOrgspropiedad pública que cualquiera puede leer desde la cadena de bloques. Pero solo la dirección que creó el contrato (el owner) puede agregar organizaciones a esa lista (probablemente también desee agregar funciones para eliminar organizaciones de la lista o cambiar la propiedad del contrato por un contrato con todas las funciones, pero eso debería darte una idea).

Está utilizando la dirección en la organización de la estructura de manera incorrecta. Se supone que es una cadena en _where
@EduardoPereira: Si la intención fuera almacenar una dirección postal (dirección postal), entonces una cadena sería apropiada. Pero la intención de este es almacenar su dirección Ethereum (ya que la pregunta original cita el caso de uso de enviarles fondos). El addresscampo de tipo es un tipo de tamaño específico para contener direcciones de Ethereum (generalmente números largos codificados en hexadecimal).
@MidnightLightning Creo que esta no será una solución de almacenamiento persistente. Como por ejemplo, si estamos cerrando nuestra conexión con el ethereum o cerrando el ganache-cli, la próxima vez que lo abramos no obtendremos los datos. ¿Cierto?.. por favor corrígeme si me equivoco
@AnikethSaha Creo que estás equivocado; la forma en que he presentado el contrato aquí (con una lista "pública" de estructuras de "Organización") es una forma estándar de almacenar datos de forma permanente en la cadena de bloques de Ethereum. Ethereum existe como una red de computadoras que ejecutan la aplicación cliente de Ethereum ("nodos") que ejecutan todas las transacciones. Por lo tanto, en el momento en que envío una transacción para activar la función "addOrg", todos los nodos registran eso como un cambio. Si me desconecto de uno de los nodos, eso no elimina los datos; todavía está allí en todos los nodos que vieron la transacción.
@AnikethSaha Ganache es una situación aparte; Ganache es un espacio de prueba para que los desarrolladores trabajen en sus aplicaciones sin arriesgar dinero real en la cadena de bloques real de Ethereum. Su red Ganache solo tiene una computadora (la suya), por lo que si su computadora pierde sus datos, realmente desaparecería. Pero simplemente detener e iniciar Ganache no elimina todo lo que contiene (eso es como detener y reiniciar un servidor de base de datos). Sin embargo, hay comandos específicos para decirle a Ganache que deseche todos los datos de la cadena de bloques y comience de nuevo, lo que luego perdería sus acciones pasadas.