Inspiration

The internet is being flooded with AI-generated, deepfaked, and subtly manipulated images and videos. As synthetic media becomes harder to distinguish from reality, trust in digital content is eroding, especially for journalists, photographers, and the public trying to verify what’s real. RealityCheck explores how blockchain can be used beyond finance to provide immutable Proof of Existence and Proof of Authorship for digital media, helping establish trust in an age where seeing is no longer believing.

What It Does

RealityCheck is a decentralized media registry that acts as a digital notary for photos and videos. Users can upload an image, cryptographically hash it, and register that hash on the Solana blockchain. Anyone can later verify an image by hashing it and instantly checking whether it exists on-chain, proving when it existed and who registered it. Verification is fast and scalable, using O(1) lookup via Program-Derived Addresses (PDAs), and can be done through:

  • A web page
  • A one-click Chrome browser extension Rather than enforcing a single authority, RealityCheck is trust-agnostic: users can choose or create their own lists of credible uploaders based on industry, region, or personal trust networks.

How I Built It

RealityCheck consists of three main components: Solana Smart Contract Built with the Anchor framework (Rust), the program stores image hashes and metadata in PDAs derived directly from the image hash, enabling constant-time verification.

Full-stack Web Application Built with Next.js, React, TypeScript, and Tailwind CSS, the app allows users to:

  • Register images on-chain
  • Verify images against the blockchain A server-side API queries Solana Devnet and is shared with the browser extension.

Chrome Browser Extension Built with Chrome Manifest V3, the extension lets users verify images found anywhere on the web with a single click by calling the verification API. All hashing is done client-side using SHA-256 to ensure the exact file bytes are verified.

Challenges I Ran Into

One major challenge was learning Solana and Anchor from scratch, especially applying blockchain concepts outside of typical financial use cases. A key design challenge was scalability. An early idea stored images per wallet, which required iterating over a user’s uploads and this wouldn’t scale. Instead, I used the image hash itself as the PDA seed, allowing direct lookup without iteration. Since Solana PDA seeds are limited to 32 bytes while SHA-256 hashes are 64 hex characters, I derived the PDA from the first 32 bytes of the hash while still validating the full hash on-chain. With 2¹²⁸ possible addresses, collisions are astronomically unlikely. Another challenge was dealing with real-world image behavior: even small changes like compression or re-encoding produce different hashes. This is intentional for proving exact file authenticity, but required careful explanation in the UX.

Accomplishments that we're proud of

  • Achieved O(1), low-latency verification using PDA-based storage
  • Built a fully working web app + browser extension + on-chain program
  • Designed a trust-agnostic system with no central authority
  • Made blockchain-based verification accessible with a clean, user-friendly UI
  • Ensured cryptographic integrity by hashing raw file bytes client-side RealityCheck empowers users to decide who they trust, rather than forcing a single source of truth.

What I Learned

  • How to build and deploy Solana programs using the Anchor framework
  • How to design blockchain data layouts for performance and scalability
  • How cryptographic hashes behave with real-world media formats
  • How to integrate Web3 workflows into modern full-stack applications
  • How browser extensions interact with decentralized systems

What's next for RealityCheck

  • Support for alternative and user-defined trust authorities
  • A default authority composed of journalists, photographers, and news outlets
  • Hardware-backed cryptographic signatures (PKI) with C2PA
  • Optional geolocation metadata for stronger provenance
  • Video support and broader media formats

Built With

Share this project:

Updates