¿Incluir una ejecución de rutina automatizada basada en la dirección del propietario en un dapp React ethereum?

Según tengo entendido, todos los componentes de front-end para un dapp de ethereum basado en reacción se representan desde el punto de vista de la cuenta predeterminada de metamask del usuario. Todas las llamadas a funciones constantes en Solidity para recuperar valores de variables de estado y representar los componentes relevantes para mostrar a los usuarios, utiliza la cuenta del usuario.

Lo que me gustaría es agregarle un cierto diseño:

  1. una rutina automatizada que se ejecuta en segundo plano (sin componentes frontales para mostrar) que evaluará el valor de la variable de estado y ejecutará una transacción de contrato inteligente que solo debe ejecutar el propietario.

  2. Esta rutina de invocación de transacciones basada en el propietario debe ejecutarse perpetuamente en segundo plano, de manera automatizada, y no solo cuando hay un usuario que tiene la página de su sitio web abierta en su navegador.

Como ejemplo, en el caso de la dapp de votación, quiero crear una rutina en la que una vez que se haya emitido una cierta cantidad de votos, o haya expirado un cierto límite de tiempo, la rutina de cálculo de votos se ejecute automáticamente, y eso también desde el propietario. dirección (ya que solo el propietario tiene el privilegio de contar los votos y declarar ganador).

¿Podría explicar cómo se puede implementar esa rutina? ¿Tendría que almacenar el archivo de almacén de claves del propietario en el extremo del servidor para ello? ¿Es una estrategia segura? Gracias.

Respuestas (2)

Podría tener un programa ejecutándose en el mismo servidor que sirve la página web de su aplicación. Este programa leerá el estado de sus variables y reaccionará ejecutando funciones. Como esto se ejecuta en su PC, puede realizar las transacciones utilizando las claves del propietario de manera segura.

Si el activador se basa únicamente en el tiempo, lo que significa que desea que una función se ejecute después de que haya pasado cierto tiempo o, en general, en una fecha en particular, puede usar servicios como el sistema de programación AION . Debido a que Aion crea una cuenta independiente (contrato inteligente) para cada usuario, puede estar seguro de que si la función proviene de esa dirección, corresponde a una función programada por el propietario. AION puede llamar a cualquier función que indiques cuando llegue un momento o bloque en particular.

Espero que esto ayude

esto es de mucha ayuda Jaime. Además, dado que compré un dominio para él, y tal vez usaré un espacio de alojamiento, ¿sería posible almacenar el almacén de claves de forma segura en este espacio de alojamiento y evitar que se recupere el almacén de claves? ¿Dónde exactamente en el servidor web (espacio de alojamiento) debo almacenar el almacén de claves y la rutina automatizada y hay alguna forma de cifrarlos? Gracias.
Si el servidor de su página web no está bajo su control, entonces no debe almacenar la clave, simplemente puede ejecutar su propio servidor (o tal vez una instancia en Google o Amazon) y ejecutar su programa allí. Estoy haciendo esto actualmente, tengo un script de python ejecutándose en 3 servidores () atendiendo los cambios en las variables en un contrato inteligente.
comprendido. Controlo el dominio y las credenciales de un espacio de alojamiento compartido. lo que quiero saber es, ¿tendría que crear dicha rutina automatizada usando un script del lado del servidor como node.js con express? ¿Hay algún tipo de ejemplo disponible en la red para poder referirme y tener una idea completa?
cualquier plataforma funcionará, nodo, python, etc., tenga en cuenta que este programa que monitorea el contrato inteligente no necesita estar relacionado con su sitio web, la aplicación funciona normalmente y su script lee el contrato inteligente, no el código web que se ejecuta la aplicación. En cuanto a los ejemplos, cualquier tutorial de web3js o web3py debería servir. Avísame si me estoy perdiendo algo.
Jaime, perdóname por reanudar esta conversación, pero ¿podrías darme también algunos detalles sobre cómo ejecutar el script del lado del servidor en instancias de los servidores de Google o Amazon? ¿De dónde obtengo estas instancias de Google o Amazon? algún enlace?
Además, ¿cómo está específicamente 'haciendo un seguimiento de las variables del contrato inteligente'? ¿Estás escuchando eventos o hay una configuración similar a una llovizna para realizar un seguimiento de los cambios de las variables? estaría muy agradecido si pudiera ayudarme en esto.
Tenga en cuenta que puede ejecutar esto en su servidor personal o en cualquier servicio en la nube (es decir, (nube de Google)[cloud.google.com/‎] o (servicios web de Amazon)[aws.amazon.com/] ) o cualquier otro. Estos dos le brindan un año sin servicio, por lo que tiene mucho tiempo para realizar pruebas.
Los registros son probablemente la forma más elegante de realizar un seguimiento de los cambios. Sin embargo, puede leer las variables cada n bloques (tal vez cada bloque nuevo), lo cual es gratuito en términos de gas, pero si tiene muchos usuarios con muchas variables, puede ser ineficiente. En el sistema de programación de Aion (supongo que está preguntando al respecto), el script utilizado se basa completamente en eventos.
déjame saber si esto te ayudó
esto fue muy útil. gracias.

Necesitas reevaluar.

Aquí está la restricción. Un cliente no puede firmar una dirección sin conocer la clave privada. La suplantación de identidad no es posible. msg.senderno miente

Debe considerar el proceso y hacerlo posiblemente influirá en el diseño del contrato.

Si solo el propietario puede declarar un ganador, eso implica que hay un cliente o servidor que eventualmente lo hará. Ese estilo implica la reintroducción de una centralización que muchas veces no es necesaria.

Si la fecha límite para votar ha pasado y los votos se cuentan honestamente, entonces no habría nada subjetivo para que el propietario decidiera. Es similar para subastas y juegos.

Ahora, puede haber algún código para ejecutar al final. Debe pensar en quién lo ejecutará o qué lo desencadenará. Es común dejar que el ganador ejecute tal función, ya que se les incentiva a pagar por la gasolina.

Considerar

function claimPrize () public onlyWinner onlyIfClosed ... 

Espero eso ayude.

No creo que las dapps de ethereum puedan descentralizarse al 100 % en todos los escenarios. Hay ciertos aspectos que a veces DEBEN ser controlados solo por una cuenta de propietario. por ejemplo, en el caso de que el sistema de votación tenga ventanas de tiempo específico para el registro, la votación y la finalización, en la actualidad, ¿existe alguna otra opción para construir este diseño que no sea un bot automatizado que cierre la ventana de votación después de un tiempo determinado y ejecute el cálculo de votos?