Files
system-docs/v4-archive/contratos-comunes/docs/NOTARIO.md
2025-12-24 17:28:34 +00:00

7.0 KiB

NOTARIO - Sistema de Sellado Blockchain

Version: 2.0 Dependencia: S-CONTRACT.md Estado: Especificacion


1. Introduccion

NOTARIO es el modulo responsable del sellado inmutable de registros criticos en blockchain. Opera como la ultima capa de confianza del ecosistema GRACE.

+---------------------------------------------------------------------+
|                    PRINCIPIO NOTARIO                                 |
|                                                                      |
|   "Lo que NOTARIO sella, nadie lo altera"                           |
+---------------------------------------------------------------------+

2. Arquitectura

+---------------------------------------------------------------------+
|                         NOTARIO                                      |
+---------------------------------------------------------------------+
|                                                                      |
|  SYS_LOG (Libro Diario)                                             |
|        |                                                             |
|        | (procesos completados + auditados)                          |
|        v                                                             |
|  +-----------------+                                                 |
|  | BATCH COLLECTOR |  Agrupa registros por ventana temporal          |
|  +-----------------+                                                 |
|        |                                                             |
|        v                                                             |
|  +-----------------+                                                 |
|  | MERKLE BUILDER  |  Construye arbol Merkle del batch               |
|  +-----------------+                                                 |
|        |                                                             |
|        v                                                             |
|  +-----------------+                                                 |
|  | BLOCKCHAIN TX   |  Publica hash raiz en blockchain                |
|  +-----------------+                                                 |
|        |                                                             |
|        v                                                             |
|  SYS_LOG (UPDATE blockchain_tx_ref)                                 |
|                                                                      |
+---------------------------------------------------------------------+

3. Dos Franjas Temporales

3.1 Franja Interna

Tiempo del sistema para:

  • Procesar operaciones
  • Ejecutar auditoria SENTINEL
  • Preparar datos para consolidacion

Duracion tipica: Minutos a horas

3.2 Franja Blockchain

Tiempo de NOTARIO para:

  • Agrupar registros en batches
  • Construir pruebas criptograficas
  • Publicar en blockchain
  • Confirmar transacciones

Duracion tipica: Horas a dias (segun volumen y costos)


4. Ciclo de Sellado

1. RECOLECTAR
   - Query SYS_LOG WHERE audit_status = 'DEEP_PASS'
   - AND blockchain_pending = FALSE
   - AND blockchain_tx_ref IS NULL

2. AGRUPAR
   - Crear batch con ventana temporal (ej: 24h)
   - Asignar notario_batch_id

3. CONSTRUIR MERKLE
   - Ordenar registros por trace_id
   - Calcular hash de cada registro
   - Construir arbol binario
   - Obtener merkle_root

4. FIRMAR
   - Firmar merkle_root con llave de NOTARIO
   - Generar timestamp certificado

5. PUBLICAR
   - Enviar transaccion a blockchain
   - Esperar confirmaciones

6. ACTUALIZAR
   - UPDATE SYS_LOG SET blockchain_tx_ref = tx_hash
   - INSERT NOTARIO_BATCHES con detalles

5. Tabla NOTARIO_BATCHES

CREATE TABLE NOTARIO_BATCHES (
  id                    UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  batch_id              UUID UNIQUE NOT NULL,

  -- Ventana temporal
  window_start          TIMESTAMPTZ NOT NULL,
  window_end            TIMESTAMPTZ NOT NULL,

  -- Contenido
  records_count         INTEGER NOT NULL,
  trace_ids             UUID[] NOT NULL,

  -- Merkle
  merkle_root           CHAR(64) NOT NULL,
  merkle_tree           JSONB,

  -- Firma
  signature             TEXT NOT NULL,
  signing_key_id        VARCHAR(100),
  signed_at             TIMESTAMPTZ NOT NULL,

  -- Blockchain
  blockchain_network    VARCHAR(50) DEFAULT 'ethereum',
  blockchain_tx_ref     VARCHAR(100),
  blockchain_block      BIGINT,
  blockchain_timestamp  TIMESTAMPTZ,
  confirmations         INTEGER DEFAULT 0,

  -- Estado
  status                VARCHAR(20) DEFAULT 'PENDING',

  -- Metadata
  created_at            TIMESTAMPTZ DEFAULT NOW(),

  CONSTRAINT valid_status CHECK (
    status IN ('PENDING', 'SUBMITTED', 'CONFIRMED', 'FAILED')
  )
);

CREATE INDEX idx_notario_status ON NOTARIO_BATCHES(status);
CREATE INDEX idx_notario_window ON NOTARIO_BATCHES(window_start, window_end);

6. Verificacion de Integridad

Para verificar que un registro no ha sido alterado:

def verify_record_integrity(trace_id, notario_batch_id):
    """
    Verifica que un registro esta incluido en un batch sellado.
    """
    # 1. Obtener batch
    batch = get_batch(notario_batch_id)

    # 2. Verificar que trace_id esta en el batch
    assert trace_id in batch.trace_ids

    # 3. Obtener registro
    record = get_syslog_record(trace_id)

    # 4. Calcular hash del registro
    record_hash = sha256(serialize(record))

    # 5. Verificar inclusion en merkle tree
    proof = get_merkle_proof(batch.merkle_tree, trace_id)
    assert verify_merkle_proof(record_hash, proof, batch.merkle_root)

    # 6. Verificar firma del batch
    assert verify_signature(batch.merkle_root, batch.signature, batch.signing_key_id)

    # 7. Verificar que merkle_root esta en blockchain
    tx = get_blockchain_tx(batch.blockchain_tx_ref)
    assert tx.data == batch.merkle_root

    return True

7. Integracion con S-CONTRACT

7.1 Campos en Response

"audit": {
  "blockchain_pending": true,
  "blockchain_tx_ref": null,
  "notario_batch_id": "uuid-batch"
}

7.2 Campos post-sellado

"audit": {
  "blockchain_pending": false,
  "blockchain_tx_ref": "0x1234...abcd",
  "notario_batch_id": "uuid-batch"
}

8. Configuracion

notario:
  enabled: true

  # Ventana de agregacion
  batch_window_hours: 24
  min_records_per_batch: 10
  max_records_per_batch: 10000

  # Blockchain
  network: ethereum
  contract_address: "0x..."
  gas_limit: 100000

  # Firma
  signing_key: kv://production/signing/notario

  # Reintentos
  max_retries: 3
  retry_delay_minutes: 60

9. Checklist de Implementacion

  • Crear tabla NOTARIO_BATCHES
  • Implementar recolector de registros
  • Implementar constructor Merkle tree
  • Configurar llave de firma
  • Integrar con proveedor blockchain
  • Implementar verificador de integridad
  • Crear workflow de sellado periodico
  • Configurar alertas para fallos

Fin del Documento NOTARIO - Version 2.0

Sistema GRACE - "Lo que NOTARIO sella, nadie lo altera"