Servicios y operación
El repositorio contiene dos procesos independientes: un keeper que envía llamadas permissionless y un retransmisor de eventos que puede preparar publicaciones. Una configuración local no prueba que un servicio funcione de forma continua.
El keeper
El keeper comprueba la red y las conexiones Hook/Lens y consulta el snapshot. En el recorrido documentado, prioriza el rebalanceo si es elegible, después la colocación de fondos y finalmente la quema aislada cuando las otras operaciones no están disponibles.
Simula antes del envío y procesa como máximo una acción por bloque. Los rechazos de elegibilidad esperados son resultados normales; los errores RPC y las simulaciones inesperadas deben señalarse como errores operativos que requieren atención.
Empezar en dry-run
Desde services/, tras instalar y configurar localmente según el README:
DRY_RUN=true pnpm keeper:once
Este modo permite comprobar la red, el despliegue, las direcciones resueltas, las elegibilidades y las estimaciones sin enviar transacciones.
La cartera operativa debe dedicarse al gas. No necesita ser el deployer, el equipo ni el guardian. Los parámetros de gas máximo y recompensa mínima limitan la ejecución; no garantizan beneficios.
Registro de transacciones y recuperación
El keeper separa los estados por cadena, hook, cartera y modo dry-run/live. Utiliza un bloqueo de proceso local y un registro duradero de intención, nonce y hash.
Tras un timeout o reinicio, retoma el seguimiento de la transacción existente antes de preparar una acción nueva. Una intención sin hash es ambigua: compara los nonces pendientes y minados de la cartera antes de modificar el registro.
Un archivo .lock solo debe eliminarse tras confirmar que su antiguo proceso ya no se ejecuta. Estos bloqueos son locales; no coordinan varias máquinas. Utiliza una cartera y un estado adecuados para cada instancia.
Evolución de los módulos
El Lens actual se resuelve desde el registro. Conserva la identidad del núcleo y el contexto de revisión durante toda la operación.
La versión de múltiples muros exige actualizar ABI, previsualizaciones, motivos de rechazo y eventos. Un keeper adaptado al muro único no debe presentarse como validado para esta versión nueva sin sus pruebas de aceptación.
El retransmisor de eventos
services/floor-bot lee los eventos, prepara un texto y conserva un cursor y las claves de deduplicación transactionHash:logIndex.
Los modos dry-run y publicación tienen estados separados. Los cursores incluyen el contexto de cadena y hook; se utilizan bloques finalizados en las redes previstas por el servicio. Una reorganización o un checkpoint incoherente debe conciliarse antes de reanudar.
El retransmisor persiste un pendingPost antes de publicar. Si el servicio externo acepta el mensaje pero el proceso se detiene antes de registrar el éxito, hay que verificar la existencia del mensaje antes de reintentar: una base local y una red social no pueden confirmar conjuntamente la operación.
El GitBook no publica mensajes. Poner en funcionamiento el retransmisor requiere configuración y autorización operativas separadas.
Adaptar el vocabulario a los muros fijos
El retransmisor antiguo anunciaba eventos FloorRaised. Con la política instantánea, una financiación puede crear un muro a un precio inferior al último financiado mientras conserva los niveles antiguos.
El retransmisor debe citar el muro afectado, su nivel y los fondos añadidos, sin deducir una subida global solo del nombre del evento. Los mensajes antiguos de “el floor siempre sube” no describen esta política.
Controles operativos útiles
Sigue los errores RPC, las discrepancias de configuración, los recibos pendientes, los fallos de simulación, el saldo de gas del keeper y la antigüedad del último bloque procesado. Conserva los registros de recuperación y las identidades de versión, sin datos privados de firma.
Una supervisión que reinicia procesos no sustituye la resolución de un nonce ambiguo ni de un cambio de registro.
Fuentes: services/keeper/README.md, services/floor-bot/README.md, services/keeper/src/index.ts y services/shared.