Registrar una organización
Tu organización (llamada Watcher en el protocolo) es tu identidad en EnergyAS. Una vez registrada, puedes crear proyectos, autorizar dispositivos para enviar lecturas y empezar a construir un historial energético verificable.
Para un ejemplo completo y funcional que combina todos los pasos, consulta el tutorial de Integración de extremo a extremo.
1. Registra tu organización
El registro está abierto a cualquiera: no requiere aprobación ni tiene costos más allá de la transacción.
Con el SDK
import { EnergySDK } from 'energy-attestation-sdk';
const sdk = await EnergySDK.fromPrivateKey({
network: 'amoy', // or 'polygon', 'celo'
privateKey: process.env.PRIVATE_KEY,
});
const { watcherId, txHash } = await sdk.watchers.createWatcher('Greenfield Energy');
console.log('Organization ID:', watcherId.toString());Directamente con el contrato
const tx = await registry.registerWatcher('Greenfield Energy');
const receipt = await tx.wait();
// Extract watcherId from the WatcherRegistered event in receipt.logs2. Crea un proyecto
Los proyectos representan sitios de energía individuales: una granja solar, una turbina eólica, un data center o cualquier instalación que genere o consuma energía.
Con el SDK
import { EnergyType } from 'energy-attestation-sdk';
const { projectId } = await sdk.projects.createProject(
watcherId,
'Solar Farm Alpha',
EnergyType.SOLAR_PV, // or any EnergyType enum value
);
console.log('Project ID:', projectId.toString());Directamente con el contrato
const tx = await registry.registerProject(
watcherId,
'Solar Farm Alpha',
1, // 1 = Solar PV; 0 = consumer
);
const receipt = await tx.wait();
// Extract projectId from the ProjectRegistered eventEl tipo de energía es permanente. Un proyecto no puede pasar de generador a consumidor después de registrarse. Esto protege la integridad de los registros históricos.
3. Autoriza a los emisores de registros
Antes de que un dispositivo o script pueda enviar lecturas de un proyecto, debe estar autorizado. Hay dos niveles de autorización, y una wallet solo necesita uno:
Autorización por proyecto (recomendada para dispositivos IoT)
// SDK
await sdk.attesters.addAttester(projectId, '0xDeviceWalletAddress');
// Contract directly
await registry.addAttester(projectId, '0xDeviceWalletAddress');Si un dispositivo se ve comprometido, revoca solo ese dispositivo; el resto de la organización no se ve afectado.
Autorización a nivel de organización (para operadores manuales o auditores)
// SDK
await sdk.attesters.addWatcherAttester(watcherId, '0xOperatorAddress');
// Contract directly
await registry.addWatcherAttester(watcherId, '0xOperatorAddress');4. Adjunta metadatos al proyecto (opcional)
Vincula documentos de respaldo a un proyecto: datos de ubicación, especificaciones de capacidad, certificados de cumplimiento:
// SDK
await sdk.projects.setProjectMetadataURI(projectId, 'ipfs://Qm...');
// Contract directly
await registry.setProjectMetadataURI(projectId, 'ipfs://Qm...');Consulta Metadatos del proyecto para ver el formato JSON esperado.
Gestión continua
| Acción | Método del SDK | Función del contrato |
|---|---|---|
| Quitar un dispositivo | sdk.attesters.removeAttester(projectId, addr) | registry.removeAttester(projectId, addr) |
| Rotar varios dispositivos a la vez | sdk.attesters.addAttesters(projectId, addrs) | registry.addAttesters(projectId, addrs) |
| Dar de baja un proyecto inactivo | sdk.projects.deregisterProject(projectId) | registry.deregisterProject(projectId) |
| Transferir un proyecto a otra organización | sdk.projects.transferProject(projectId, toWatcherId) | registry.transferProject(projectId, toWatcherId) |
| Transferir la propiedad de la organización | sdk.watchers.transferWatcherOwnership(watcherId, addr) | registry.transferWatcherOwnership(watcherId, addr) |
Los proyectos dados de baja dejan de aceptar nuevos envíos, pero todos los registros históricos permanecen on-chain de forma permanente.