🔐 Chain Verification

Verify the cryptographic integrity of your SoWasIt blockchain chains

📦 GitHub Repository📚 API Reference

Vérification de chaînes

Vérifiez l'intégrité cryptographique de vos chaînes SoWasIt hors ligne, n'importe quand, n'importe où. Aucune clé API requise pour la vérification - transparence et indépendance totales.

Fonctionnalités

  • Vérification hors ligne - Vérifiez l'intégrité de la chaîne sans aucun appel API
  • Preuve cryptographique - Vérification de hash double SHA-256
  • Suivi de progression - Barre de progression visuelle pour les grandes chaînes
  • Outil CLI - Interface en ligne de commande facile
  • Package NPM - API programmatique pour les applications Node.js
Pourquoi vérifier ?
  • Faites confiance, mais vérifiez - Ne faites pas simplement confiance à la plateforme, vérifiez vous-même la preuve cryptographique
  • Conformité - Répondez aux exigences d'audit avec une vérification indépendante
  • Validation des sauvegardes - Assurez-vous que vos sauvegardes de chaînes sont intactes et non modifiées
  • Transparence - N'importe qui peut vérifier l'intégrité de votre chaîne, aucun accès spécial requis
  • Indépendance - La vérification fonctionne hors ligne, sans dépendance à l'infrastructure SoWasIt

Installation

Installez via npm :

npm install @sowasit/chain-verifier

Ou utilisez directement avec npx (aucune installation nécessaire) :

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

Utilisation CLI

Vérifier une chaîne

Vous pouvez vérifier soit un fichier local, soit télécharger et vérifier une chaîne par ID :

# Vérifier un fichier local
npx @sowasit/chain-verifier verify chain.json

# Télécharger et vérifier une chaîne publique
npx @sowasit/chain-verifier verify my-chain-id

# Télécharger et vérifier une chaîne privée
npx @sowasit/chain-verifier verify my-private-chain --api-key te_xxxxx

# Vérification avec sortie détaillée
npx @sowasit/chain-verifier verify my-chain.json --verbose --output report.json

Options

  • -o, --output <file> - Sauvegarder le rapport de vérification dans un fichier
  • -v, --verbose - Afficher les résultats détaillés bloc par bloc
  • -k, --api-key <key> - Clé API (ou utilisez la variable d'environnement SOWASIT_API_KEY). Requis uniquement pour les chaînes privées
  • -u, --api-url <url> - URL de l'API (par défaut : https://api.sowasit.io)
  • --force-download - Forcer le re-téléchargement, en ignorant le cache local
  • --include-anchors - Inclure les blocs d'ancrage pour la vérification
Mise en cache: Lors de la vérification par ID de chaîne, les blocs sont mis en cache dans .sowasit-cache/chainId/ et seuls les nouveaux blocs sont téléchargés lors des exécutions suivantes.

Télécharger une chaîne depuis l'API

Téléchargez une chaîne complète ou partielle depuis l'API SoWasIt :

# Télécharger une chaîne publique
npx @sowasit/chain-verifier download my-public-chain-id

# Télécharger une chaîne privée
npx @sowasit/chain-verifier download my-chain-id --api-key te_xxxxx

# Télécharger une plage partielle de blocs
npx @sowasit/chain-verifier download my-chain-id --from 100 --to 200

API programmatique

Vérifier une chaîne

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

// Charger l'export de chaîne
const chainData = JSON.parse(await readFile('chain.json', 'utf-8'));

// Vérifier
const result = verifyChain(chainData);

if (result.valid) {
  console.log(`✓ ${result.validBlocks} blocs sont valides`);
} else {
  console.log(`✗ ${result.invalidBlocks} blocs invalides`);
  console.log('Erreurs:', result.errors);
}

Télécharger une chaîne

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

// Télécharger une chaîne publique (aucune clé API requise)
const publicChainData = await downloadChain('public-chain-id', {
  apiUrl: 'https://api.sowasit.io',
});

// Télécharger une chaîne privée (clé API requise)
const privateChainData = await downloadChain('private-chain-id', {
  apiKey: 'te_xxxxx',
  apiUrl: 'https://api.sowasit.io',
  from: 0,
  to: 100,
});

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

Processus de vérification

  • Intégrité du hash - Le hash de chaque bloc est recalculé en utilisant le double SHA-256 et comparé au hash stocké
  • Continuité de la chaîne - Le prev_hash de chaque bloc doit correspondre au hash du bloc précédent
  • Bloc genesis - Le premier bloc doit avoir un prev_hash correspondant au hash de la chaîne (depuis chain.hash)
  • Ordre des blocs - Les blocs sont vérifiés dans l'ordre séquentiel par ID
  • Vérification des ancres - Si des blocs d'ancrage sont inclus, vérifie que tous les blocs référencés existent et que les hashs correspondent

Exemples d'utilisation

Intégration CI/CD

Automatisez la vérification de vos chaînes avec GitHub Actions :

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

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

jobs:
  verify:
    runs-on: ubuntu-latest
    steps:
      - name: Télécharger la chaîne
        run: |
          npx @sowasit/chain-verifier download ${{ secrets.CHAIN_ID }} \
            --api-key ${{ secrets.SOWASIT_API_KEY }} \
            --output chain.json

      - name: Vérifier la chaîne
        run: |
          npx @sowasit/chain-verifier verify chain.json \
            --verbose \
            --output verification-report.json

      - name: Téléverser le rapport
        uses: actions/upload-artifact@v3
        with:
          name: verification-report
          path: verification-report.json

Script de sauvegarde automatique

Téléchargez et vérifiez automatiquement vos chaînes :

// 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;

  // Télécharger
  console.log('Téléchargement de la chaîne...');
  const chainData = await downloadChain(chainId, { apiKey });

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

  // Vérifier
  console.log('Vérification...');
  const result = verifyChain(chainData);

  if (!result.valid) {
    throw new Error(`Échec de la vérification: ${result.errors.join(', ')}`);
  }

  console.log(`✓ Sauvegarde vérifiée: ${result.validBlocks} blocs`);
}

backupAndVerify().catch(console.error);

Comment ça marche

SoWasIt utilise le double SHA-256 (le même algorithme que Bitcoin) pour garantir l'immuabilité :

1. Les données de chaque bloc sont sérialisées de manière déterministe (canonicalisation JSON)
  ↓
2. Les données sont hachées deux fois avec SHA-256 : SHA256(SHA256(data))
  ↓
3. Chaque bloc contient le hash du bloc précédent (prev_hash)
  ↓
4. Modifier un seul bit dans un bloc invalide tous les blocs suivants

Garanties

  • Falsification impossible - Toute modification brise la chaîne
  • Vérification rapide - Seulement du hachage, pas de cryptographie complexe
  • Preuve portable - Juste un fichier JSON, aucun outil spécial requis