Tutorial: Votación fuera de la cadena de los DAO de Aragón con tecnología de Witnet de Mario Cao Blog de la Fundación Witnet Agosto 2021

A pesar de que la complejidad de la ejecución está oculta a los usuarios, se puede utilizar para comprender mejor la solución y todas sus "piezas móviles":

los Bot de discordia obtiene toda la información requerida de los contratos del Gobierno de Aragón consultando el servidor de subgraph. Bot de discordia lee una nueva propuesta de Gobierno de los usuarios (p. ej., "transferir fondos a una dirección"). Una vez que finaliza el período de votación de la propuesta, Bot de discordia desencadena la resolución de la propuesta creando primero una solicitud de datos Witnet que consultará los resultados de la votación. Monitores de reacción.Como parte de esa consulta, cada Monitores de reacción buscar las reacciones a la propuesta del Servidor de discordia.La ejecución de la solicitud de datos se finaliza agregando todos Monitores de reacción los resultados de la votación y comprobar si hubo consenso entre ellos. Bot de discordia detecta que la solicitud de datos se ha ejecutado.Si la solicitud de datos fue exitosa, el Bot de discordia activará el cronograma de la propuesta y, después de la ventana de disputa / desafío, se ejecutará en el contrato inteligente del Gobierno de Aragón.

Este tutorial tiene los siguientes requisitos:

El acceso a los Ethereum: ejecute un nodo Ethereum (por ejemplo, geth) o tenga acceso a una interfaz JSON-RPC para poder firmar y enviar transacciones Ethereum. Witnet: ejecute un nodo Witnet o tenga acceso a una interfaz JSON-RPC para enviar solicitudes de datos a la red Witnet.

Nodo Ethereum

El segundo requisito es tener acceso a un nodo Ethereum para poder interactuar con los contratos de Aragon Govern. Hay 2 posibilidades para acceder a un nodo:

Haga girar su propio nodo Ethereum Utilice un proveedor Web3 (por ejemplo, nodos como servicio).

En ambas configuraciones, se requiere una cuenta Ethereum desbloqueada para interactuar con los contratos de Aragón y firmar transacciones.

Esta cuenta se utilizará más adelante en el tutorial como una variable de entorno llamada WEB3_ACCOUNT.

Nodo Witnet

El primer requisito es que se necesita acceso a un nodo Witnet para enviar solicitudes de datos (es decir, consultar los resultados de la propuesta). Más concretamente, se requiere una interfaz JSON-RPC con un nodo Witnet.

Para ejecutar un nodo Witnet, siga las instrucciones de la documentación, pero asegúrese de que se pueda acceder al puerto JSON-RPC para el siguiente paso (bot de discordia), de forma predeterminada en el puerto 21338.

Las instrucciones de la ventana acoplable para hacer accesible también el puerto 21338 son:

$ docker ejecutar -d
–nombre witnet_node
–volumen ~ / .witnet: /. witnet
–publicado 21337: 21337
–publicado 21338: 21338
– reiniciar siempre
Witnet / Witnet-óxido

Nota: El nodo Witnet necesita algunos fondos para poder enviar solicitudes de datos a la red.

El puerto y el host del nodo Witnet se utilizarán más adelante en este tutorial como WITNET_NODE_HOST y WITNET_NODE_PORT respectivamente.

Cree un DAO de Aragón utilizando el sitio web del Gobierno de Aragón.

Para ser compatible con la implementación actual del bot Aragon, es importante configurar el DAO de la siguiente manera:

Los montos de la garantía deben establecerse en 0.0 tokens. La lista blanca de transacciones de programación debe establecerse en "Cualquier dirección" o en la misma dirección que el nodo Ethereum ha desbloqueado, es decir, WEB3_ACCOUNT.

Por ejemplo, el DAO violeta-enojado se configuró de la siguiente manera:

El bot de Discord operará en los servidores de Discords a los que ha sido invitado. Si aún no se ha creado el servidor, siga estas instrucciones.

Una vez que existe el servidor, los bots se pueden crear como:

Vaya a https://discord.com/developers/applications Cree una nueva aplicación
una. Haga clic en "Nueva aplicación" y proporcione un nombre de aplicación.
B. Completa la “Información general” de la aplicaciónCrea un bot
una. En el panel de la aplicación, vaya al menú lateral "Bot"
B. Haga clic en el botón "Agregar bot"
C. Configure el nombre de usuario del bot (por defecto será el mismo que el nombre de la aplicación)
D. Copie el bot TOKEN (será necesario en los siguientes pasos)
mi. Configure su bot como desee (por ejemplo, bot público, permisos, …) Invite al bot al servidor de Discord
una. En el panel de la aplicación, vaya al menú lateral "OAuth2"
B. En la sección "Generador de URL de OAuth2", haga clic en "bot"
C. Haga clic en el botón "Copiar" para copiar la URL de autorización.
D. Vaya a la URL copiada (debe comenzar con: https://discord.com/oauth2/authorize?client_id=)
D. Seleccione el servidor de Discord y autorice al bot a unirse

Después de crear los bots, deberían aparecer como fuera de línea dentro de la lista de miembros del servidor de Discord.

Deben seguirse las instrucciones anteriores para crear el Bot conversacional y tantos como desee Monitores de reacción.

Los tokens de Discord y las URL de Oauth son necesarios para los siguientes pasos como DISCORD_TOKEN y MONITOR_LINK respectivamente.

Dentro de este repositorio hay dos paquetes, que se configurarán en los siguientes pasos del tutorial:

Bot conversacional: contiene la lógica del robot discord de Aragon.Monitores de reacción: actúa como un middleware para leer las reacciones de los mensajes de la API de Discord y luego publicar los resultados a través de una API de REST pública.

Después de asegurarse de que se cumplen los requisitos mencionados anteriormente, el acceso a un nodo Witnet y Ethereum, siga estos pasos:

Clone el repositorio discord-bot-integration de GitHub $ git clone https://github.com/stampery-labs/aragon-govern-discord-integration Ingrese al directorio, instale todas las dependencias y compile el proyecto: $ cd aragon-govern-discord -integración
$ hilo
$ bootstrap de hilo

los Bot conversacional se configura mediante variables de entorno. Lo más fácil de configurar el bot es usar el archivo .env ubicado en aragon-govern-discord-integration / packages / bot.

Los principales parámetros de configuración son:

DISCORD_TOKEN: el token disponible en el paso 2 (3.b) del bot conversacional MONITOR_NAME_0: nombre del monitor de reacción que se muestra después del mensaje de configuración MONITOR_LINK_0: URL de OAuth2 generada en el paso 2 (4.c) .MONITOR_RETRIEVE_URL_0: host y puerto del monitor para ser consultado por los nodos Witnet (debe ser accesible externamente) .WEB3_ACCOUNT: Cuenta Ethereum desde la cual se envían las transacciones.WEB3_PROVIDER: host y puerto del proveedor web3.WITNET_NODE_HOST: host del nodo Witnet.WITNET_NODE_PORT: puerto del nodo Witnet.

Ejemplo de archivo .env:

MEDIO AMBIENTE = desarrollo
DISCORD_TOKEN =
# El período mínimo que una propuesta debe estar activa en segundos
MINIMUM_PROPOSAL_DEADLINE = 120 # Servidor de subgrafos
SUBGRAPH_ENDPOINT = https://api.thegraph.com/subgraphs/name/aragon/aragon-govern-rinkeby# Lista de monitores de reacción
MONITOR_NAME_0 = "Monitor de reacciones 1"
MONITOR_LINK_0 =
MONITOR_RETRIEVE_URL_0 = MONITOR_NAME_1 = "Monitor de reacciones 2"
MONITOR_LINK_1 =
MONITOR_RETRIEVE_URL_1 = # Proveedor Web3
WEB3_ACCOUNT =
WEB3_PROVIDER = http: // localhost: 8544 # Witnet
WITNET_NODE_HOST = "localhost"
WITNET_NODE_PORT = 22338

Desde la carpeta aragon-govern-discord-integration, inicie el bot conversacional como:

$ yarn bot (BOT): conectado al nodo Witnet
Conectado a la base de datos
(BOT): servidor de discordia de escucha
(BOT): buscando propuestas activas
(BOT): propuestas activas encontradas ()

Monitores de reacción están configurados de una manera similar pero más simple al bot conversacional. Solo contiene 2 parámetros:

DISCORD_TOKEN: el token disponible en el Paso 2 (3.b) del monitor de reacción bot.PORT: puerto para escuchar las solicitudes HTTP GET, utilizado por los nodos de Witnet para consultar los resultados de la propuesta.

Ejemplo de archivo .env:

DISCORD_TOKEN =
PUERTO = 3000

Desde la carpeta Aragon-Govern-Discord-Integration, cada Monitor de reacción comienza como:

$ yarn server (servidor) escuchando en PORT 3000
Conectado a la base de datos

Idealmente, Monitores de reacción deben funcionar en diferentes máquinas y deben funcionar de forma independiente. Sin embargo, si se ejecutan en la misma máquina (por ejemplo, con fines de prueba), los puertos deben ser diferentes para cada uno de ellos.

La variable de entorno PORT también se puede definir en línea como:

$ PORT = 3001 servidor de hilo (servidor) escuchando en PORT 3001
Conectado a la base de datos

Ya casi terminamos, el último paso tiene que ver con el camino feliz y con verificar que todos los componentes configurados estén funcionando correctamente:

1. Primero, si aún no lo hizo, agregue el bot a un servidor Discord usando la URL OATH2 como se describe en el Paso 2 (4d). Una vez que haya agregado el bot a su servidor, debería aparecer en línea en la lista de miembros.

2. Configure su DAO de Aragon Govern utilizando el comando! Setup dentro del canal y especifique el nombre del DAO y qué rol tiene permitido enviar propuestas.

!configuración

3. Solo los usuarios autorizados (con un rol configurado) pueden crear propuestas utilizando el comando! Propuesta como:

!propuesta para:

valor: ¿datos?:

Ejemplo:

! propuesta 2021/03/26 15:07:00 ¿quieres dar una subvención a la ENTIDAD? to: 0x199eA5114D1612e40E3457Eaf9DF2779340EAD12 valor: 0.01

4. Después de que el bot recibe una propuesta, comienza el período de votación y se leerán las reacciones ? y ? de todos los usuarios de Discord.

5. Cuando se alcanza la fecha límite de la propuesta, los usuarios no pueden seguir votando. Luego, el bot creará una solicitud de datos Witnet para recuperar los resultados de la votación y entregará los datos al DAO de Aragón en forma de una transacción programada.

6. Una vez finalizado el período de disputa, el bot activará la ejecución de la propuesta como una transacción de ejecución. Esto también ejecutará la acción especificada. En este caso, transfiriendo ETH a la dirección indicada.

Si has llegado hasta aquí, ¡muchas gracias por tu paciencia! ?

Sabemos que la integración tiene muchas partes móviles y no es fácil hacerla funcionar en el primer intento. ¡Tenga en cuenta que esta integración es un trabajo en progreso y que todavía faltan funciones por agregar!

El código fuente de integración es de código abierto y está disponible en nuestro repositorio de Github aragon-govern-discord-integration. ¡Los nuevos colaboradores y las solicitudes de nuevas funciones siempre son bienvenidos! ?