Flujo de Operaciones
Paso a paso de cómo se procesa y registra una operación típica en Polaris.
Registro de una Transacción
Usuario crea registro
El usuario ingresa los datos de la transacción (monto, descripción, categoría, etc.) desde el dashboard de Polaris.
Backend valida
El servidor valida permisos del usuario, formato de datos, límites de presupuesto y reglas de negocio configuradas.
Se encripta y guarda
Los datos se encriptan con AES-256-GCM y se guardan en Supabase con Row Level Security.
Se genera hash
Se calcula SHA-256 del registro encriptado para crear una huella digital única e irreversible.
Se firma digitalmente
El hash se firma con la llave privada del usuario/departamento para garantizar autenticidad.
Se envía a Hedera
El mensaje firmado se publica en Hedera Consensus Service (HCS), quedando inmutable en la red.
Se guarda txId
El ID de transacción de Hedera se vincula al registro en Supabase para futuras verificaciones.
Ejemplo de Código
// Pseudocódigo simplificado
async function registrarTransaccion(data, userId) {
// 1. Validar permisos y datos
await validarPermisos(userId, data.departmentId)
await validarDatos(data)
// 2. Encriptar datos
const encrypted = await encrypt(data, MASTER_KEY)
// 3. Guardar en Supabase
const record = await supabase
.from('transactions')
.insert({ encrypted_data: encrypted, user_id: userId })
.select()
.single()
// 4. Generar hash
const hash = sha256(encrypted)
// 5. Firmar con llave del usuario
const signature = await sign(hash, userPrivateKey)
// 6. Publicar en Hedera HCS
const txResponse = await hederaClient.submitMessage({
topicId: COMPANY_TOPIC_ID,
message: JSON.stringify({
type: 'transaction',
hash,
signature,
timestamp: Date.now()
})
})
// 7. Vincular txId
await supabase
.from('transactions')
.update({ hedera_tx_id: txResponse.transactionId })
.eq('id', record.id)
return { success: true, txId: txResponse.transactionId }
}Verificación
Para verificar la integridad de cualquier registro:
- 1Obtener el registro encriptado de Supabase
- 2Calcular SHA-256 del dato encriptado
- 3Consultar el mensaje en Hedera usando el txId
- 4Comparar hashes: si coinciden, el registro no ha sido alterado