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.
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:
- Cargar cualquier archivo
- Calcular su hash Keccak-256 (la “huella digital” del documento)
- Firmar ese hash con tu wallet usando el estándar EIP-712
- 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