Documentación

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.

Nota

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

JavaScript
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

JavaScript
const tx = await registry.registerWatcher('Greenfield Energy');
const receipt = await tx.wait();
// Extract watcherId from the WatcherRegistered event in receipt.logs

2. 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

JavaScript
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

JavaScript
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 event
Nota

El 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)

JavaScript
// 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)

JavaScript
// 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:

JavaScript
// 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ónMétodo del SDKFunción del contrato
Quitar un dispositivosdk.attesters.removeAttester(projectId, addr)registry.removeAttester(projectId, addr)
Rotar varios dispositivos a la vezsdk.attesters.addAttesters(projectId, addrs)registry.addAttesters(projectId, addrs)
Dar de baja un proyecto inactivosdk.projects.deregisterProject(projectId)registry.deregisterProject(projectId)
Transferir un proyecto a otra organizaciónsdk.projects.transferProject(projectId, toWatcherId)registry.transferProject(projectId, toWatcherId)
Transferir la propiedad de la organizaciónsdk.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.