¿Cómo conectar una base de datos a un contrato/dapp?

Estoy trabajando para hacer un contrato que emitirá un token a un usuario. El usuario realizará una acción y esta quedará almacenada en nuestra base de datos. Una vez que se almacena en nuestra base de datos, debe haber un enlace entre nuestra base de datos y el contrato/dapp que activa la emisión del token. Me preguntaba cómo se haría para crear ese vínculo. ¿Es tan fácil como hacer un oyente (si es posible)?

Respuestas (1)

Sería útil si nos dijera un poco más sobre lo que está tratando de lograr: ¿por qué sus datos se dividen entre la cadena de bloques y su base de datos? (No estoy diciendo que esto sea algo incorrecto, pero el diseño apropiado dependerá de sus objetivos).

Tal como lo describe, terminará con dos acciones diferentes, una colocando los datos en la base de datos y la otra emitiendo el token en la cadena de bloques. Uno de estos puede tener éxito y el otro fallar, por lo que probablemente querrá designar uno como "maestro" y el otro como "esclavo", es decir, uno siempre tiene la última versión de los datos y el otro se actualiza. después para emparejarlo.

Si considera que la cadena de bloques es el "maestro", lo más obvio es realizar la transacción mediante el envío de una solicitud a su contrato en la cadena de bloques y luego hacer que se emita un evento. Luego tenga un proceso escuchando ese evento y colocando los datos necesarios en su base de datos. Si algo falla, podrá volver a ejecutar ese proceso y ponerse al día con cualquier evento que falte, aunque su base de datos estará atrasada mientras tanto.

Se divide porque la base de datos es para nuestra empresa, por lo que podemos almacenar los datos que ingresa el usuario. La parte del contrato es para los derechos de voto sobre la donación de dinero. Entonces, lo que sucederá es que el usuario usará nuestro servicio y cada vez que lo haga, almacenaremos los datos de la transacción en nuestra base de datos. Después la idea es dar también al usuario cada vez que se utiliza el servicio. Los tokens se utilizan como derechos de voto para decidir cómo donamos una parte de nuestros ingresos. Entonces diría que nuestra base de datos tendría que ser el maestro y el contrato el esclavo, y ahí es donde surge mi pregunta. Esperemos que esto aclare.
Bien, agregue un campo a la base de datos con la marca de tiempo de la emisión exitosa del token tx. Inserte, envíe el tx a su contrato. Incluya el ID de su base de datos como parámetro del contrato. En su contrato mantenga un registro de esa identificación y devuélvala si ya se ha manejado. De lo contrario, emita el token y genere un evento con la ID del registro en la base de datos. Ejecute un proceso para escuchar esos eventos de ID de registro y actualice la marca de tiempo de la base de datos para que sepa que está listo. Ejecute un proceso para verificar los registros de la base de datos cuyas transacciones fallaron y envíe la transacción a la cadena de bloques.
Así que permítanme ejecutar un ejemplo para ver si lo hice bien. El usuario utiliza nuestro servicio, y una vez que lo hace es enviado a la base de datos. La base de datos enviará una marca de tiempo y una identificación al contrato. Verifique que la coincidencia de identificación y las marcas de tiempo sean diferentes. Luego emita un token y devuelva el tx o el número de token a la base de datos y complete el contrato. Espero estar entendiendo eso. Así que tengo otra pregunta, ¿cómo se haría para configurar ese tipo de enlace desde la base de datos hasta el contrato? ¿Lo codificaría en la base de datos para conectarme al contrato usando una dirección o viceversa? Espero que esté claro.
La forma obvia de hacer esto sería ejecutar un proceso daemon, probablemente escrito en node.js, para comunicarse tanto con la cadena de bloques como con la base de datos.
Y solo para entender las opciones, si hago que el contrato sea el maestro, ¿cómo lo haría, si hay detalles específicos? Por ejemplo, de nuestra parte, escribiría el contrato en la billetera y lo desplegaría. Una vez implementado, cuando nuestro usuario usa nuestro producto, le damos un código único y eso debería conducir al contrato. El contrato recibe el código, encuentra o crea al usuario y le emite un token. Luego hace ping a la base de datos para actualizar y eso debería hacerse. ¿Es eso más o menos lo esencial, o estoy fuera? ¿Hay una forma específica de hacer esto y aún necesitaría un proceso de daemon?