On-Chain Verifiable Photo Capture System empowered by Arbitrum Orbit L3 and Stylus to beat deepfakes and AI
On-Chain Verifiable Photo Capture System using Stylus and Arbitrum Orbit L3
A decentralized application that combats AI-generated fake images by enabling users to capture photos via webcam and cryptographically verify them on-chain. Using Arbitrumโs Stylus (Rust smart contracts) and Orbit L3, each photo is hashed, stored on IPFS, and verified on the blockchain with ZK-style ownership proofs.
Feature | Description |
|---|---|
๐ธ Webcam Capture | Real-time photo capture using react-webcam |
๐ On-Chain Verification | SHA-256 hash stored immutably on Arbitrum |
โก Stylus Contracts | Rust/WASM for ~10x gas savings vs Solidity |
๐ IPFS Storage | Decentralized image storage via Pinata |
๐ ZK Commitments | keccak256-based ownership proofs |
๐ฃ Orbit L3 | Custom L3 chain for ultra-low cost verification |
๐ฆ Social Sharing | Tweet verification proofs directly |
๐ Verification Page | Anyone can verify authenticity by uploading an image |
๐ Network Switching | Seamlessly switch between Sepolia and L3 |
๐ท๏ธ Watermarked Badges | Download verified images with proof overlay |
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ FRONTEND โ
โ React 18 + TypeScript + Vite + Tailwind + Wagmi v2 โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ PhotoCaptureโ โ VerifyPage โ โ NetworkSwitcher โ โ
โ โ Enhanced โ โ โ โ (Sepolia โ Orbit L3) โ โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโ
โผ โผ โผ
โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโ
โ IPFS โ โ Arbitrum โ โ Orbit L3 โ
โ (Pinata) โ โ Sepolia โ โ (Local/Custom) โ
โ โ โ Chain: 421614 โ โ Chain: 333333 โ
โ Images + โ โ โ โ โ
โ Metadata โ โ โโโโโโโโโโโโ โ โ โโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโ โ โ Stylus โ โ โ โ Stylus โ โ
โ โ Contract โ โ โ โ Contract โ โ
โ โ (Rust) โ โ โ โ (Rust) โ โ
โ โโโโโโโโโโโโ โ โ โโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโ
Network | Contract Address | Chain ID | RPC |
|---|---|---|---|
Arbitrum Sepolia |
| 421614 | |
Orbit L3 (Local) |
| 333333 |
Node.js 18+ and npm
Rust toolchain: rustup install stable
Cargo Stylus CLI: cargo install cargo-stylus --locked
Docker (for Orbit L3 local development)
MetaMask wallet
Testnet ETH: Get from Sepolia Faucet
git clone https://github.com/yourusername/ArbiPic.git
cd ArbiPic
# Install frontend dependenciescd frontend && npm install
# Build Rust contractcd ../contracts && cargo build --release
Create frontend/.env:
VITE_PINATA_JWT=your_pinata_jwt_token
VITE_PINATA_GATEWAY=your-gateway.mypinata.cloud
VITE_APP_URL=http://localhost:5173cd frontend
npm run dev
Visit http://localhost:5173
For ultra-low cost verification on your own L3 chain:
# Clone nitro-testnode
git clone --recurse-submodules https://github.com/OffchainLabs/nitro-testnode.git
cd nitro-testnode
# Start L1 โ L2 โ L3 chainyes | ./test-node.bash --init --l3node --detach
cd ArbiPic/contracts
cargo stylus deploy \
--endpoint http://127.0.0.1:3347 \
--private-key 0xb6b15c8cb491557369f3c7d2c287b053eb229daa9c22138887752191c9520659Field | Value |
|---|---|
Network Name | ArbiPic L3 (Orbit) |
RPC URL | |
Chain ID | 333333 |
Currency Symbol | ETH |
Pre-funded test account:
Address: 0x3f1Eae7D46d88F08fc2F8ed27FCb2AB183EB2d0E
Private Key: 0xb6b15c8cb491557369f3c7d2c287b053eb229daa9c22138887752191c9520659
See docs/ORBIT_L3_DEPLOYMENT.md for detailed guide.
Connect Wallet: Click โConnect Walletโ and connect MetaMask
Select Network: Use the network switcher (๐ต Sepolia or ๐ฃ Orbit L3)
Capture Photo: Click โ๐ธ Capture Photoโ
Verify On-Chain: Click โ๐ Verify On-Chainโ to submit
View Results: Get IPFS link, transaction hash, and verification ID
Share: Tweet your verified photo or copy the verification link
Go to /verify page
Upload the image or paste the verification ID
System checks on-chain if the photo was verified
See owner address, timestamp, and ZK proof status
If you verified a photo, you can prove ownership without revealing the image:
Click โ๐ Prove Ownershipโ
Your locally-stored secret is used to verify against on-chain commitment
Cryptographic proof confirms youโre the original owner
Operation | Stylus (Rust) | Solidity | Savings |
|---|---|---|---|
verifyPhoto | ~45,000 gas | ~120,000 gas | ~63% |
getAttestation | ~8,000 gas | ~25,000 gas | ~68% |
verifyZkProof | ~12,000 gas | ~35,000 gas | ~66% |
See docs/GAS_BENCHMARKS.md for detailed benchmarks.
cd contracts
cargo stylus check
cargo build --release --target wasm32-unknown-unknown
cargo stylus deploy --endpoint https://sepolia-rollup.arbitrum.io/rpc --private-key $KEYcd frontend
npm run dev # Start dev server
npm run build # Build for production
npm run preview # Preview production buildCategory | Implementation |
|---|---|
โ Stylus | Rust smart contract with keccak256 ZK proofs |
โ Orbit L3 | Custom chain deployment with nitro-testnode |
โ Gas Efficiency | 60-70% savings vs Solidity |
โ IPFS | Decentralized storage via Pinata |
โ ZK Proofs | Privacy-preserving ownership verification |
โ Multi-Chain | Network switcher (Sepolia + L3) |
โ Social Proof | Twitter sharing integration |
โ Modern UX | React 18 + Wagmi v2 + Tailwind |
Production Orbit Chain - Deploy on mainnet L3
Full ZK Proofs - Implement SNARKs/STARKs for complete privacy
Batch Verification - Verify multiple photos in one transaction
AI Detection - Integrate deepfake detection algorithms
Mobile App - React Native version
Cross-Chain Bridge - Verify proofs across L2/L3
Built with โค๏ธ ๐
Fighting AI fakes with blockchain technology
Built from Scratch solely for this hackathon and for future milestones
N/A