🔐 Verificación de Cadenas - SoWasIt

Verifique la integridad criptográfica de sus cadenas SoWasIt

📦 Repositorio GitHub📚 Referencia API

Verificación de cadenas

Verifique la integridad criptográfica de sus cadenas de integridad de SoWasIt sin conexión, en cualquier momento y lugar. No se requiere clave API para la verificación: transparencia e independencia total.

Características

  • Verificación sin conexión - Verifique la integridad de la cadena sin llamadas API
  • Prueba criptográfica - Verificación de hash doble SHA-256
  • Seguimiento de progreso - Barra de progreso visual para cadenas grandes
  • Herramienta CLI - Interfaz de línea de comandos fácil
  • Paquete NPM - API programática para aplicaciones Node.js
¿Por qué verificar?
  • Confía, pero verifica - No solo confíe en la plataforma, verifique usted mismo la prueba criptográfica
  • Cumplimiento - Cumpla con los requisitos de auditoría con verificación independiente
  • Validación de respaldos - Asegúrese de que sus respaldos de cadenas estén intactos y sin modificar
  • Transparencia - Cualquiera puede verificar la integridad de su cadena, no se requiere acceso especial
  • Independencia - La verificación funciona sin conexión, sin dependencia de la infraestructura de SoWasIt

Instalación

Instalar vía npm:

npm install @sowasit/chain-verifier

O usar directamente con npx (no se requiere instalación):

npx @sowasit/chain-verifier verify my-chain.json

Uso de CLI

Verificar una cadena

Puede verificar un archivo local o descargar y verificar una cadena por ID:

# Verificar un archivo local
npx @sowasit/chain-verifier verify chain.json

# Descargar y verificar una cadena pública
npx @sowasit/chain-verifier verify my-chain-id

# Descargar y verificar una cadena privada
npx @sowasit/chain-verifier verify my-private-chain --api-key te_xxxxx

# Verificar con salida detallada
npx @sowasit/chain-verifier verify my-chain.json --verbose --output report.json

Opciones

  • -o, --output <file> - Guardar informe de verificación en archivo
  • -v, --verbose - Mostrar resultados detallados bloque por bloque
  • -k, --api-key <key> - Clave API (o usar variable de entorno SOWASIT_API_KEY). Requerido solo para cadenas privadas
  • -u, --api-url <url> - URL de API (predeterminado: https://api.sowasit.io)
  • --force-download - Forzar re-descarga, ignorando caché local
  • --include-anchors - Incluir bloques de anclaje para verificación
Caché: Al verificar por ID de cadena, los bloques se almacenan en caché en .sowasit-cache/chainId/ y solo se descargan bloques nuevos en ejecuciones posteriores.

Descargar una cadena desde la API

Descargue una cadena completa o parcial desde la API de SoWasIt:

# Descargar una cadena pública
npx @sowasit/chain-verifier download my-public-chain-id

# Descargar una cadena privada
npx @sowasit/chain-verifier download my-chain-id --api-key te_xxxxx

# Descargar rango parcial de bloques
npx @sowasit/chain-verifier download my-chain-id --from 100 --to 200

API programática

Verificar una cadena

import { verifyChain } from '@sowasit/chain-verifier';
import { readFile } from 'fs/promises';

// Cargar exportación de cadena
const chainData = JSON.parse(await readFile('chain.json', 'utf-8'));

// Verificar
const result = verifyChain(chainData);

if (result.valid) {
  console.log(`✓ ${result.validBlocks} bloques son válidos`);
} else {
  console.log(`✗ ${result.invalidBlocks} bloques inválidos`);
  console.log('Errores:', result.errors);
}

Descargar una cadena

import { downloadChain } from '@sowasit/chain-verifier';
import { writeFile } from 'fs/promises';

// Descargar cadena pública (no se requiere clave API)
const publicChainData = await downloadChain('public-chain-id', {
  apiUrl: 'https://api.sowasit.io/v1',
});

// Descargar cadena privada (se requiere clave API)
const privateChainData = await downloadChain('private-chain-id', {
  apiKey: 'te_xxxxx',
  apiUrl: 'https://api.sowasit.io/v1',
  from: 0,
  to: 100,
});

await writeFile('chain.json', JSON.stringify(privateChainData, null, 2));

Proceso de verificación

  • Integridad del hash - El hash de cada bloque se recalcula usando doble SHA-256 y se compara con el hash almacenado
  • Continuidad de la cadena - El prev_hash de cada bloque debe coincidir con el hash del bloque anterior
  • Bloque génesis - El primer bloque debe tener un prev_hash que coincida con el hash de la cadena (desde chain.hash)
  • Orden de bloques - Los bloques se verifican en orden secuencial por ID
  • Verificación de anclajes - Si se incluyen bloques de anclaje, verifica que todos los bloques referenciados existan y los hashes coincidan

Ejemplos de uso

Integración CI/CD

Automatice la verificación de cadenas con GitHub Actions:

# .github/workflows/verify-chain.yml
name: Verify Chain Integrity

on:
  schedule:
    - cron: '0 0 * * *'  # Diariamente

jobs:
  verify:
    runs-on: ubuntu-latest
    steps:
      - name: Descargar cadena
        run: |
          npx @sowasit/chain-verifier download ${{ secrets.CHAIN_ID }} \
            --api-key ${{ secrets.SOWASIT_API_KEY }} \
            --output chain.json

      - name: Verificar cadena
        run: |
          npx @sowasit/chain-verifier verify chain.json \
            --verbose \
            --output verification-report.json

      - name: Subir informe
        uses: actions/upload-artifact@v3
        with:
          name: verification-report
          path: verification-report.json

Script de respaldo automático

Descargue y verifique automáticamente sus cadenas:

// backup-and-verify.js
import { downloadChain, verifyChain } from '@sowasit/chain-verifier';
import { writeFile } from 'fs/promises';

async function backupAndVerify() {
  const chainId = process.env.CHAIN_ID;
  const apiKey = process.env.SOWASIT_API_KEY;

  // Descargar
  console.log('Descargando cadena...');
  const chainData = await downloadChain(chainId, { apiKey });

  // Guardar
  const filename = `backup-${chainId}-${new Date().toISOString()}.json`;
  await writeFile(filename, JSON.stringify(chainData, null, 2));
  console.log(`Guardado en ${filename}`);

  // Verificar
  console.log('Verificando...');
  const result = verifyChain(chainData);

  if (!result.valid) {
    throw new Error(`Verificación fallida: ${result.errors.join(', ')}`);
  }

  console.log(`✓ Respaldo verificado: ${result.validBlocks} bloques`);
}

backupAndVerify().catch(console.error);

Cómo funciona

SoWasIt utiliza hash doble SHA-256 (el mismo algoritmo que Bitcoin) para garantizar la inmutabilidad:

1. Los datos de cada bloque se serializan de forma determinista (canonicalización JSON)
  ↓
2. Los datos se hashean dos veces con SHA-256: SHA256(SHA256(data))
  ↓
3. Cada bloque contiene el hash del bloque anterior (prev_hash)
  ↓
4. Cambiar cualquier bit en cualquier bloque invalida todos los bloques posteriores

Garantías

  • La manipulación es imposible - Cualquier modificación rompe la cadena
  • La verificación es rápida - Solo hashing, sin criptografía compleja
  • La prueba es portable - Solo un archivo JSON, no se requieren herramientas especiales