FileHashStorage é uma aplicação descentralizada (dApp) completa que permite armazenar e verificar a autenticidade de documentos utilizando a tecnologia blockchain do Ethereum. O sistema combina smart contracts desenvolvidos com Foundry e uma interface web moderna construída com Next.js.
No mundo atual, verificar a autenticidade de documentos digitais é um desafio constante. Este projeto oferece uma solução blockchain que permite:
- Imutabilidade: Uma vez registrado um documento, seu hash não pode ser modificado
- Rastreabilidade: Cada documento inclui timestamp e assinatura digital verificável
- Transparência: Qualquer pessoa pode verificar a autenticidade de um documento
- Descentralização: Não depende de uma autoridade central
- Verificação de Títulos Acadêmicos: Universidades podem registrar os hashes de diplomas para que empregadores verifiquem sua autenticidade
- Certificação de Documentos Legais: Notários podem registrar contratos e documentos legais com timestamp imutável
- Proteção de Propriedade Intelectual: Artistas e criadores podem registrar suas obras para demonstrar autoria
- Auditoria de Documentos Corporativos: Empresas podem manter um registro imutável de documentos importantes
- Verificação de Identidade: Documentos de identidade podem ser verificados sem revelar informações sensíveis
O projeto está estruturado em dois componentes principais:
alucart2005/
├── sc/ # Smart Contracts (Foundry)
│ ├── src/ # Contratos Solidity
│ ├── test/ # Testes de contratos
│ └── script/ # Scripts de implantação
└── dapp/ # Aplicação Frontend (Next.js)
├── app/ # Páginas e rotas
├── components/ # Componentes React
├── contexts/ # Contextos de React
└── lib/ # Utilitários e configuraçãoAntes de começar, certifique-se de ter instalado:
- Node.js (v16 ou superior) - Baixar Node.js
- Foundry - Framework para desenvolvimento de smart contracts
- Git - Controle de versão
- Anvil (incluído com Foundry) - Rede local Ethereum para desenvolvimento
Se você ainda não tem o Foundry instalado, execute:
curl -L https://foundry.paradigm.xyz | bash
foundryupPara Windows (usando Git Bash ou PowerShell):
# Baixar e instalar de: https://github.com/foundry-rs/foundry/releases
# Ou usar chocolatey:
choco install foundrygit clone https://github.com/alucart2005/alucart2005.git
cd alucart2005# Navegar para o diretório de contratos
cd sc
# Instalar dependências (forge-std)
forge install
# Compilar os contratos
forge build
# Executar os testes
forge test# Navegar para o diretório da dApp
cd ../dapp
# Instalar dependências do Node.js
npm install
# Verificar se o Anvil está em execução
npm run check-anvilEm um terminal separado, inicie o Anvil:
anvilIsso iniciará uma blockchain local em http://localhost:8545 com 10 contas pré-financiadas para testes.
O contrato é implantado automaticamente quando você inicia a aplicação, mas também pode fazer isso manualmente:
cd sc
forge script script/FileHashStorage.s.sol:FileHashStorageScript --rpc-url http://localhost:8545 --broadcastApós a implantação, copie o endereço do contrato e atualize o arquivo de configuração:
# Editar dapp/config/contract-config.json
{
"address": "0xSEU_ENDERECO_DO_CONTRATO_AQUI",
"chainId": 31337
}Você pode criar um arquivo .env.local no diretório dapp/ para configurações adicionais:
NEXT_PUBLIC_RPC_URL=http://localhost:8545
NEXT_PUBLIC_CHAIN_ID=31337# Do diretório dapp/
npm run devA aplicação estará disponível em http://localhost:3000
- Conectar Carteira: Conecte sua carteira MetaMask ou use uma das contas do Anvil
- Enviar Documento: Selecione um arquivo e calcule seu hash
- Assinar e Registrar: Assine o hash com sua carteira e registre-o na blockchain
- Verificar Documento: Verifique a autenticidade de qualquer documento registrado
Situação: Um empregador precisa registrar um contrato de trabalho para demonstrar sua existência em uma data específica.
Passos:
-
Preparar o documento:
# O documento "contrato_trabalho_2024.pdf" está pronto para ser registrado -
Da interface web:
- Conecte sua carteira (conta do empregador)
- Envie o arquivo
contrato_trabalho_2024.pdf - O sistema calcula automaticamente o hash SHA-256
- Assine o hash com sua carteira
- Confirme a transação para registrar o documento
-
Verificação posterior:
- Qualquer pessoa pode verificar o documento enviando o mesmo arquivo
- O sistema comparará o hash e mostrará:
- ✅ Se o documento é autêntico
- 📅 Data e hora de registro
- 👤 Endereço da carteira que o registrou
Benefício: O empregador tem prova imutável de que o contrato existia em uma data específica, útil em disputas trabalhistas.
Situação: Uma universidade quer emitir diplomas verificáveis em blockchain.
Processo:
-
A universidade registra o diploma:
// Hash do diploma: 0x7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730 // Timestamp: 1704067200 (1 de janeiro de 2024) // Assinatura: Assinatura criptográfica da universidade
-
O graduado verifica seu diploma:
- O graduado envia seu arquivo PDF do diploma
- O sistema verifica que o hash coincide
- Mostra as informações de registro (data, instituição)
-
Um empregador verifica a autenticidade:
- O empregador recebe o diploma do candidato
- Envia-o ao sistema de verificação
- Obtém confirmação imediata de autenticidade
Benefício: Elimina a necessidade de contatar a universidade para verificar diplomas, economizando tempo e recursos.
Situação: Um fotógrafo quer proteger suas fotografias antes de publicá-las.
Implementação:
-
Registro da obra original:
# O fotógrafo registra o hash de "foto_original.jpg" # Isso cria um registro imutável de que a foto existia em uma data específica
-
Em caso de plágio:
- O fotógrafo pode demonstrar que registrou a obra antes
- O timestamp na blockchain é prova legal de autoria
- A assinatura criptográfica confirma a identidade do autor
Benefício: Prova legal de autoria sem a necessidade de registros caros em escritórios de patentes.
Situação: Uma empresa precisa manter um registro auditado de documentos financeiros.
Fluxo:
-
Registro mensal de demonstrações financeiras:
// Cada mês, o CFO registra: // - Balanço patrimonial // - Demonstração de resultados // - Fluxo de caixa
-
Verificação por auditores:
- Os auditores podem verificar que os documentos não foram alterados
- O timestamp garante a sequência temporal
- A assinatura do CFO é verificável
-
Conformidade regulatória:
- As autoridades podem verificar documentos sem acesso a sistemas internos
- Transparência sem comprometer a privacidade
Benefício: Conformidade regulatória melhorada e processos de auditoria mais eficientes.
Situação: Uma instituição precisa verificar documentos de identidade sem armazenar dados pessoais.
Solução:
-
O usuário registra seu documento:
- Envia uma cópia de seu documento de identidade
- O sistema registra apenas o hash (não os dados pessoais)
- O usuário assina com sua carteira
-
Verificação pela instituição:
- A instituição recebe o documento do usuário
- Calcula o hash e verifica-o na blockchain
- Confirma autenticidade sem armazenar dados sensíveis
Benefício: Privacidade melhorada (apenas o hash é armazenado) e verificação rápida.
cd sc
forge testforge test -vvv # Mostra logs detalhadosforge test --match-test test_StoreDocumentHash# Compilar contratos
forge build
# Executar testes
forge test
# Implantar em rede local
forge script script/FileHashStorage.s.sol:FileHashStorageScript --rpc-url http://localhost:8545 --broadcast
# Verificar contrato em um explorador de blocos
forge verify-contract <ENDERECO> FileHashStorage --chain-id 1# Desenvolvimento
npm run dev
# Construir para produção
npm run build
# Iniciar servidor de produção
npm start
# Verificar se o Anvil está em execução
npm run check-anvil
# Implantar contrato manualmente
npm run deployArmazena o hash de um documento com seu timestamp e assinatura.
Parâmetros:
hash: Hash do documento (SHA-256, Keccak-256, etc.)timestamp: Data de registro (Unix timestamp)signature: Assinatura ECDSA do hash (65 bytes)
Retorna: bool - true se o armazenamento foi bem-sucedido
Exemplo de uso:
bytes32 docHash = keccak256("meu_documento.pdf");
uint256 timestamp = block.timestamp;
bytes memory signature = /* assinatura do hash */;
fileHashStorage.storeDocumentHash(docHash, timestamp, signature);Verifica que uma assinatura corresponde a um documento e signatário específicos.
Parâmetros:
hash: Hash do documento a verificarsigner: Endereço do signatário esperadosignature: Assinatura a verificar
Retorna: bool - true se a assinatura é válida
Obtém todas as informações de um documento registrado.
Retorna:
bytes32: Hash do documentouint256: Timestamp de registroaddress: Endereço do signatáriobytes: Assinatura do documento
Verifica se um documento existe no sistema.
Retorna: bool - true se o documento está registrado
Emitido quando um documento é registrado com sucesso.
Contribuições são bem-vindas! Este projeto faz parte dos materiais de aprendizado da Codecrypto Academy.
-
Fazer fork do repositório
git clone https://github.com/alucart2005/alucart2005.git
-
Criar uma ramificação para sua funcionalidade
git checkout -b feature/minha-nova-funcionalidade
-
Fazer suas alterações
- Siga as melhores práticas do Solidity
- Escreva testes para novas funcionalidades
- Atualize a documentação
-
Executar os testes
cd sc && forge test cd ../dapp && npm run lint
-
Fazer commit de suas alterações
git commit -m "feat: adicionar nova funcionalidade de verificação" -
Enviar para sua ramificação
git push origin feature/minha-nova-funcionalidade
-
Abrir um Pull Request
- Solidity: Siga as melhores práticas do Solidity
- Testes: Escreva testes abrangentes para todas as novas funcionalidades
- Documentação: Atualize a documentação para quaisquer alterações na API
- Código Limpo: Mantenha o código legível e bem comentado
Use mensagens de commit descritivas seguindo o formato:
tipo: descrição breve
Descrição detalhada (opcional)Tipos comuns:
feat: Nova funcionalidadefix: Correção de bugdocs: Alterações na documentaçãotest: Adicionar ou modificar testesrefactor: Refatoração de código
Este projeto está licenciado sob a Licença MIT - consulte o arquivo LICENSE para mais detalhes.
- Documentação do Foundry
- Documentação do Next.js
- Documentação do Solidity
- Recursos para Desenvolvedores Ethereum
- GitHub: @alucart2005
- Projeto: Parte da Codecrypto Academy
Este projeto utiliza as seguintes tecnologias e ferramentas:
- Foundry - Framework de desenvolvimento de smart contracts
- Next.js - Framework React para produção
- Ethers.js - Biblioteca para interagir com Ethereum
- Anvil - Cliente Ethereum para desenvolvimento local
Nota: Este projeto foi projetado para fins educacionais e de prática. Para uso em produção, certifique-se de realizar auditorias de segurança completas e considerar as implicações legais e regulatórias.
