Navigation
Print Share Copy URL
Breadcrumb

DocumentSignStorage: Registro Descentralizado de Documentos con EIP-712

Sistema para registrar la existencia e integridad de documentos digitales en la blockchain usando firmas criptográficas EIP-712 y hash Keccak-256.

[Maximiliano A. Paredes]

El Problema: ¿Cómo Probar que un Documento Existió?

Imaginate tener que demostrar que un contrato, un título académico o una factura existió en un momento determinado sin depender de ninguna institución centralizada. Eso es exactamente lo que resuelve DocumentSignStorage.

El sistema permite:

  1. Cargar cualquier archivo
  2. Calcular su hash Keccak-256 (la “huella digital” del documento)
  3. Firmar ese hash con tu wallet usando el estándar EIP-712
  4. Registrar esa firma en un Smart Contract en la blockchain de Ethereum

Una vez registrado, nadie puede alterar el documento sin que el hash cambie, y la blockchain garantiza que la firma existió en ese bloque.

¿Qué es EIP-712?

EIP-712 es un estándar de Ethereum para firmas de datos estructurados (typed structured data). A diferencia de una firma de mensaje plano, EIP-712 incluye:

  • El dominio de la aplicación (nombre, versión, chainId, contrato)
  • La estructura tipada del mensaje a firmar

Esto previene ataques en los que una firma generada para una dapp pueda ser reutilizada maliciosamente en otro contexto (replay attacks cross-domain).

// Estructura del documento en el contrato
struct Document {
    bytes32 documentHash;
    address signer;
    uint256 timestamp;
    bytes signature;
}

Stack Tecnológico

Smart Contracts

  • Solidity 0.8.19 con OpenZeppelin para EIP-712
  • Foundry (Forge + Anvil) para desarrollo y testing
  • Tests unitarios y de integración con forge test

Frontend

  • Next.js 16 + React 19: Framework principal
  • Ethers.js v6: Interacción con la blockchain
  • Zod: Validación de esquemas de entrada
  • TailwindCSS: Estilos
  • Jest + Testing Library: Suite de pruebas del frontend

Flujo de Usuario

1. Usuario sube un archivo
       ↓
2. Frontend genera hash Keccak-256 en el navegador
       ↓
3. Usuario firma el hash con MetaMask (EIP-712)
       ↓
4. Frontend envía hash + firma al smart contract
       ↓
5. Contrato registra y emite evento DocumentRegistered
       ↓
6. Cualquiera puede verificar en la blockchain

Por Qué Es Interesante

La clave de este proyecto es que el archivo nunca sube a la blockchain (sería carísimo en gas). Solo sube el hash. Esto preserva la privacidad del contenido mientras se garantiza la integridad y existencia del documento.

Es la base tecnológica de sistemas como notarías digitales descentralizadas, certificación de títulos académicos on-chain, o timestamping de propiedad intelectual.

Código fuente: github.com/87maxi/documentSignStorage