Diseño multi-inquilino
EnergyAS es un protocolo compartido, pero cada watcher (organización) opera en completo aislamiento. Ningún watcher puede interferir con los datos, proyectos o atestadores de otro.
Jerarquía de inquilinos
EnergyRegistry (single instance per network)
├── Watcher 1: "Solar Co" (owner: 0xAlice)
│ ├── Project 1: "Farm A" (generator)
│ │ ├── Attester: 0xIoTDevice1
│ │ └── Attester: 0xAlice (manual backup)
│ └── Project 2: "Farm B" (generator)
│ └── (inherits watcher-wide attester: 0xAuditor)
│
└── Watcher 2: "Wind Co" (owner: 0xBob)
└── Project 3: "Turbine Park" (generator)
└── Attester: 0xIoTDevice2Garantías de aislamiento
- Los atestadores del watcher A no pueden atestar en los proyectos del watcher B
- El propietario del watcher A no puede registrar proyectos bajo el watcher B
- El propietario del watcher A no puede agregar atestadores a los proyectos del watcher B
- Los acumuladores de energía se llevan por separado para cada proyecto y cada watcher
- Los reemplazos en un proyecto no afectan a los demás proyectos
Todo el aislamiento se aplica a nivel de la EVM: no es posible eludir estas verificaciones, ni siquiera con llamadas directas al contrato.
Roles y permisos
Contract Owner (deployer)
→ Authorize/deauthorize resolvers
→ Pause/unpause resolver
→ Cannot manage watchers or projects
Energy Type Admin (separate from owner, transferable)
→ Register and remove energy source types
Watcher Owner (wallet that called registerWatcher)
→ Register/deregister projects
→ Add/remove attesters (per-project and watcher-wide)
→ Transfer projects between watchers
→ Transfer watcher ownership
→ Set project metadata URIs
Attester (whitelisted wallet)
→ Submit energy attestations for authorized projects
→ Submit replacement attestations to correct errors
Anyone
→ Register a new watcher
→ Read all public data (totals, project info, etc.)Nota
Advertencia: En despliegues de producción, usa un multisig (por ejemplo, Gnosis Safe) como propietario del watcher en lugar de una EOA. Así evitas que la pérdida de una clave inhabilite la gestión del watcher.