Documentación

API de EnergyAttestationResolver

El resolver es la capa de validación sin estado que EAS llama en cada intento de atestación y de revocación. Decodifica, valida y delega en el registro.

Hooks del resolver

Nota

Estas funciones las llama EAS automáticamente: no las invocas directamente. Se documentan aquí para que entiendas el flujo de validación.

onAttest

Solidity
onAttest(Attestation attestation, uint256 value) → bool

EAS lo llama en cada nueva atestación. Realiza la siguiente validación:

1. Revert if resolver is paused
2. Decode attestation data (7 fields)
3. Validate structure:
   - readingCount > 0
   - readingIntervalMinutes > 0
   - readings.length == readingCount
   - method is non-empty
4. Validate project:
   - Project exists and is registered
5. Validate attester:
   - Per-project OR watcher-wide authorization
6. Compute derived values:
   - toTimestamp = fromTimestamp + readingCount * interval * 60
   - energyWh = sum(readings)
7. Validate timestamps:
   - toTimestamp > fromTimestamp (no overflow)
8. Route to registry:
   - If refUID is zero: registry.recordAttestation()
   - If refUID is set: validate replacement, then registry.recordReplacement()

onAttest: ruta de reemplazo

Cuando refUID está definido (distinto de cero), el resolver procesa una atestación de reemplazo:

1. Validate that the replacement targets the same project
2. Validate that the replacement covers the same time period
3. Delegate to registry.recordReplacement() with both old and new energy values

El registro ajusta los acumuladores según la diferencia y registra la cadena de reemplazos.

onRevoke

Solidity
onRevoke(Attestation attestation, uint256 value) → bool

Siempre revierte con DirectRevocationBlocked(). No se admiten revocaciones directas: las correcciones deben hacerse mediante el mecanismo de reemplazo con refUID, para conservar una pista de auditoría completa.

Funciones de administración

pause / unpause

Solidity
pause()
Solidity
unpause()

Pausa o reanuda el procesamiento de atestaciones. Al pausar se bloquean las nuevas atestaciones y los reemplazos. Solo el propietario del contrato.

getRegistry

Solidity
getRegistry() → address

Devuelve la dirección del EnergyRegistry en el que escribe este resolver.

isPayable

Solidity
isPayable() → bool

Siempre devuelve false: las atestaciones de energía no transportan valor en ETH.

renounceOwnership

Deshabilitada: siempre revierte. Esto evita quedarse sin propietario por accidente.