Skip to main content

Manual del Operador del Oráculo

Este documento está destinado a aquellos que desean participar en el protocolo Lido como entidad que ejecuta un demonio para sincronizar el estado desde la Capa Beacon hasta la Capa de Ejecución del protocolo. Debido a la falta de comunicación nativa entre estas dos redes, Lido emplea una red de oráculos para sincronizar el sistema en intervalos regulares.

TL;DR

  1. Genera una dirección Ethereum.
  2. Inicia y sincroniza un nodo de Capa de Ejecución (archivado durante al menos 2 semanas) con el endpoint JSON-RPC habilitado.
  3. Inicia y sincroniza un nodo de Capa de Consenso (archivado) con el endpoint de API habilitado.
  4. Inicia el servicio de la API de Keys.
  5. Inicia los módulos de contabilidad y ejector del Oráculo.
  6. Opcional: Añade alertas a las métricas de Prometheus del Oráculo.
  7. En caso de mainnet, comparte tu dirección e intención de unirte al conjunto del Oráculo de forma pública. Debes publicarlo en Twitter y también escribir un mensaje con el enlace de Twitter bajo la publicación de Onboarding en el foro de Investigación.
  8. Proporciona tu dirección Ethereum del Oráculo al equipo de Lido para que vote por agregar tu dirección al conjunto de miembros del Oráculo.

Introducción

El mecanismo Oráculo de Lido comprende tres componentes principales. El primer componente es el conjunto de contratos inteligentes de Oráculo, que recibe informes de actualización de los oráculos y los transmite al contrato Lido para ejecutar las acciones necesarias basadas en los cambios reportados. El segundo componente es el demonio oráculo fuera de la cadena, ejecutado por cada nodo oráculo y responsable de monitorear el estado del protocolo y generar informes de actualización. El tercer componente es la red de nodos informáticos que ejecutan los miembros del oráculo, que proporcionan colectivamente la información necesaria para que el contrato inteligente Oráculo calcule el nuevo estado del protocolo.

Basándose en los informes de actualización recibidos de los oráculos, el contrato inteligente Lido realiza transiciones de estado como actualizar los saldos de los usuarios, procesar solicitudes de retiro y distribuir recompensas a los operadores de nodos. Así, el mecanismo Oráculo de Lido actúa como un dispositivo de sincronización que conecta el protocolo a través de las capas de ejecución y consenso. Garantiza que el protocolo se actualice de manera oportuna y precisa, permitiendo el funcionamiento fluido y eficiente de todo el sistema Lido.

Los dos contratos principales en el suite Oráculo de Lido se llaman AccountingOráculo y ValidatorsExitBus. Juntos, estos contratos recopilan información presentada por los oráculos sobre el estado de los validadores y sus saldos, la cantidad de fondos acumulados en las bóvedas del protocolo, el número de solicitudes de retiro que el protocolo puede procesar y los validadores que se espera que salgan voluntariamente para finalizar más solicitudes de retiro. Esta información se utiliza luego para procesos cruciales como:

  • Rebasar los saldos de los usuarios.
  • Distribuir recompensas a los operadores de nodos.
  • Procesar solicitudes de retiro.
  • Decidir qué validadores deben iniciar la salida voluntaria.
  • Distribuir la participación.
  • Poner el protocolo en modo búnker.

Fases del Oráculo

Para enviar los datos del informe por parte del operador del oráculo tanto a AccountingOráculo como a ValidatorsExitBusOráculo, es necesario que:

  • Este operador participe en el comité del oráculo, y
  • Se debe alcanzar un consenso para el informe correspondiente.

El proceso de enviar los datos del informe se puede dividir en 3 etapas principales:

Fase 1. Envío de un hash de informe y alcanzar consenso

En la primera etapa, los operadores del oráculo recopilan un informe para un determinado refSlot y envían el hash al contrato HashConsensus.

El diagrama siguiente muestra: ReportProcessor - Contrato AccountingOráculo o ValidatorsExitBusOráculo. HashConsensus - Un contrato que gestiona el comité de miembros del oráculo y permite a los miembros alcanzar consenso sobre el hash de datos particular para cada marco de informe.

Puedes leer más sobre HashConsensus aquí.

Fase 2. Envío de datos del informe

Cuando se alcanza el consenso, uno de los operadores del oráculo envía los datos del informe y activa la actualización del estado central del protocolo (incluido el rebase del token, la distribución de recompensas a los operadores de nodos, la finalización de solicitudes de retiro y la decisión de entrar en el modo búnker) o emite eventos ValidatorExitRequest para informar a los operadores de nodos sobre las nuevas solicitudes de salida voluntaria necesarias para realizar.

Fase 3. Envío de datos adicionales del informe

Este paso es necesario para AccountingOráculo, que implica la distribución de recompensas para módulos de staking en esta fase.

Membresía del Comité

El conjunto actual de Oráculo consta de 9 participantes:

El quórum es 5/9. Esto significa que la finalización del informe solo puede ocurrir cuando hay 5 informes idénticos de 5 miembros de oráculos diferentes.

Consulta Expansion of Lido on Ethereum Oráculo set para más detalles.

Requisitos Previos

Nodo Cliente de Ejecución

Para preparar el informe, el Oráculo recupera hasta 10 días de eventos antigu

os, realiza solicitudes históricas de datos de saldo y genera informes simulados en bloques históricos. Esto requiere un nodo de ejecución archivado con al menos dos semanas de datos archivados.

ClienteProbadoNotas
Geth--gcmode=archive
--syncmode=snap

O

--gcmode=archive
--syncmode=full
NethermindNo probado aún
BesuUsar
--rpc-max-logs-range=100000
--sync-mode=FULL
--data-storage-format="FOREST"
--pruning-enabled
--pruning-blocks-retained=100000
parámetros
ErigonUsar
--prune=htc
--prune.h.before=100000
--prune.t.before=100000
--prune.c.before=100000
parámetros

Nodo Cliente de Consenso

Para calcular algunas métricas para el modo búnker, Oráculo necesita un nodo de consenso archivado.

ClienteProbadoNotas
LighthouseUsar el parámetro --reconstruct-historic-states.
LodestarNo probado aún
NimbusNo probado aún
PrysmUsar
--grpc-max-msg-size=104857600
--enable-historical-state-representation=true
--slots-per-archive-point=1024
parámetros
TekuUsar
--data-storage-mode=archive
--data-storage-archive-frequency=1024
--reconstruct-historic-states=true
parámetros

Servicio de API de Keys

Este es un servicio separado que utiliza el cliente de ejecución para recuperar todas las claves de Lido. Almacena el estado más reciente de las claves de Lido en la base de datos.

Repositorio de Lido Keys API

El daemon del Oráculo

El daemon Oráculo es una aplicación en Python que contiene dos módulos:

  • Módulo de contabilidad
  • Módulo ejector

El código fuente del Oráculo está disponible en https://github.com/lidofinance/lido-Oráculo.

Los módulos obtienen el slot reportable, y si este slot está finalizado, calculan y envían el informe a los contratos inteligentes AccountingOráculo y ExitBusOráculo.

Variables de entorno

El daemon Oráculo requiere las siguientes variables de entorno:

Requeridas

  • EXECUTION_CLIENT_URI - lista de URI del cliente de ejecución separados por coma. El segundo y siguientes URI se usarán como respaldo.
  • CONSENSUS_CLIENT_URI - lista de URI del cliente de consenso separados por coma. El segundo y siguientes URI se usarán como respaldo.
  • KEYS_API_URI - lista de URI del cliente de API de Keys separados por coma. El segundo y siguientes URI se usarán como respaldo.
  • LIDO_LOCATOR_ADDRESS - dirección del contrato inteligente Lido Locator.

Opcional

Uno de:

  • MEMBER_PRIV_KEY - Clave privada de la cuenta de miembro del Oráculo.
  • MEMBER_PRIV_KEY_FILE - Ruta al archivo que contiene la clave privada de la cuenta de miembro del Oráculo.

Se puede encontrar una lista completa aquí.

Dirección del Lido Locator

Mainnet 0xC1d0b3DE6792Bf6b4b37EccdcC24e45978Cfd2Eb

Holešky 0x28FAB2059C713A7F9D8c86Db49f9bb0e96Af1ef8

Ejecución del daemon

Iniciar el módulo de contabilidad

docker run -d --name lido-Oráculo-accounting \
--env "EXECUTION_CLIENT_URI=$EXECUTION_CLIENT_URI" \
--env "CONSENSUS_CLIENT_URI=$CONSENSUS_CLIENT_URI" \
--env "KEYS_API_URI=$KEYS_API_URI" \
--env "LIDO_LOCATOR_ADDRESS=$LOCATOR_ADDRESS" \
--env "MEMBER_PRIV_KEY=$MEMBER_PRIV_KEY" \
lidofinance/Oráculo@<hash de la imagen> accounting

Iniciar el módulo ejector

docker run -d --name lido-Oráculo-ejector \
--env "EXECUTION_CLIENT_URI=$EXECUTION_CLIENT_URI" \
--env "CONSENSUS_CLIENT_URI=$CONSENSUS_CLIENT_URI" \
--env "KEYS_API_URI=$KEYS_API_URI" \
--env "LIDO_LOCATOR_ADDRESS=$LOCATOR_ADDRESS" \
--env "MEMBER_PRIV_KEY=$MEMBER_PRIV_KEY" \
lidofinance/Oráculo@<hash de la imagen> ejector

Hash de la imagen más reciente https://docs.lido.fi/guías/tooling/#Oráculo

Esto iniciará el Oráculo en modo daemon. También puedes ejecutarlo en modo puntual, por ejemplo, si prefieres activar la ejecución del Oráculo como un trabajo cron. En este caso, establece la variable de entorno DAEMON en 0.

Métricas y Alertas

Cómo configurar alertas y detalles sobre métricas se pueden encontrar aquí.