Registry y Resolver
El diseño de dos contratos es la columna vertebral de EnergyAS. Entender cómo interactúan el Registry y el Resolver es esencial para trabajar con el protocolo.
EnergyRegistry
El registry es el contrato de estado permanente. Almacena todos los watchers, proyectos, atestadores, acumuladores de energía y bloqueos de período. Nunca se reemplaza ni se migra.
Responsabilidades
| Función | Descripción |
|---|---|
| Gestión de watchers | Registro y transferencia de propiedad |
| Gestión de proyectos | Registro, baja y transferencia entre watchers |
| Gestión de atestadores | Lista blanca por proyecto y para todo el watcher |
| Bloqueo de períodos | Evita atestaciones duplicadas para la misma ventana de tiempo |
| Cadena lineal obligatoria | Garantiza que las atestaciones formen una línea de tiempo continua por proyecto |
| Acumuladores de energía | Totales acumulados por proyecto y por watcher |
| Autorización de resolvers | Controla qué resolvers pueden escribir en el registry |
| Registro de tipos de energía | Registro on-chain de tipos de fuente de energía válidos |
| Seguimiento de reemplazos | Rastrea las cadenas de corrección entre atestaciones |
EnergyAttestationResolver
El resolver es una capa de validación sin estado. Implementa la interfaz de resolver de EAS y EAS lo invoca automáticamente en cada intento de atestación y revocación.
Responsabilidades
| Función | Descripción |
|---|---|
| Decodificación de datos | Decodifica los datos de la atestación codificados en ABI (7 campos) |
| Validación estructural | Verifica readingCount, el intervalo, la longitud del arreglo de lecturas y method |
| Verificación de permisos | Comprueba que el atestador esté en la lista blanca del proyecto o del watcher |
| Cálculo de valores derivados | Calcula toTimestamp y el energyWh total a partir de las lecturas |
| Validación de reemplazos | Verifica que las atestaciones de reemplazo coincidan con el proyecto y el período del original |
| Delegación al registry | Llama a recordAttestation() o recordReplacement() en el registry |
| Bloqueo de revocaciones | Rechaza las revocaciones directas para preservar la pista de auditoría |
Cómo interactúan
El resolver lee del registry (para comprobar el estado del proyecto, la autorización del atestador, etc.) y escribe en él (para registrar atestaciones y reemplazos). El registry solo acepta escrituras de resolvers autorizados.
Registry.authorizeResolver(resolverAddress)
→ Resolver can now call registry.recordAttestation()
→ Resolver can now call registry.recordReplacement()
Registry.deauthorizeResolver(resolverAddress)
→ Resolver can no longer write to registryPueden autorizarse varios resolvers al mismo tiempo. Esto permite migraciones sin tiempo de inactividad, en las que el resolver antiguo y el nuevo funcionan en paralelo durante un período de transición.