VeriStamp dApp
Click to Expand

VeriStamp dApp

A decentralized application that creates immutable proof of existence for digital files by recording their cryptographic hash on the Ethereum blockchain.

Solidity
Hardhat
Next.js
TypeScript
wagmi
RainbowKit
Tailwind CSS

The Problem

Verifying the authenticity of digital documents often depends on centralized services that require users to trust a third party. I wanted to build a decentralized solution where anyone could verify a document without uploading the original file or relying on a central authority.

Engineering Challenges

The biggest challenge was proving the existence of a file without storing the actual document on-chain. The solution needed to preserve user privacy while keeping blockchain storage and transaction costs practical.

Step-by-Step Workflow

1. Client-Side Hash Generation

The selected file is hashed directly inside the browser using keccak256 before any blockchain interaction takes place. Since only the generated hash is used, the original document never leaves the user's device.

2. Smart Contract Registration

The generated hash is submitted through RainbowKit and wagmi to a Solidity smart contract, where it is permanently recorded together with the wallet address and blockchain timestamp.

3. Public Verification

To verify a document, the application generates its hash again and compares it with the value stored on-chain. Matching hashes confirm the document has not been modified since registration.

Why This Architecture?

Keeping hashing on the client protects user privacy while reducing blockchain storage requirements. Separating the smart contract and frontend into a monorepo also made development and testing easier to manage.

Key Features

  • Client-side document hashing using keccak256.
  • Immutable proof of existence stored on Ethereum.
  • Wallet integration with RainbowKit and wagmi.
  • Public verification without uploading original files.
  • Smart contract development and testing using Hardhat.

Performance

Only the generated hash is submitted to the blockchain, allowing verification without transferring or storing the original document.

Trade-offs

Blockchain transactions depend on wallet availability, network congestion, and gas fees. Confirmation times also vary depending on network conditions.

Lessons Learned

Building VeriStamp strengthened my understanding of Solidity, smart contract development, wallet integration, blockchain transactions, and designing applications that protect user privacy through client-side cryptographic operations.