Search projects, hackathons, sponsors and tech

    ← All projects

    ProofOS

    Verifiable income proofs for crypto India

    Demo

    About

    The problem it solves **Right now, if you hold ₹2Cr in ETH, you cannot:** - Get a home loan (banks won't accept wallet statements as income proof) - Apply for a US visa (embassies want bank statements, not transaction exports) - Pass an audit (CAs need verifiable tax records, not spreadsheets) - Prove solvency to a business partner (without handing over your entire wallet history) The current options are bad: - Export your full wallet history → privacy gone - Trust a CA with raw data → no cryptographic guarantee - Use existing tools (KoinX, Cleartax) → they give you a PDF, not a proof **ProofOS lets you prove facts about your money without revealing your money.** Generate a ZK proof that says: - "I earned ₹40L this year" (for a bank loan) - "I paid ₹6.2L in taxes" (for an auditor) - "My net worth is above ₹50L" (for a visa application) ...all backed by on-chain verification. No transaction history exposed. No trust required. **Who it's for:** - Crypto freelancers applying for visas - Traders getting home loans - Family offices managing 20+ wallets (via ENS) - Anyone filing ITR-VDA who wants a verifiable proof The tax calculator is the entry point. The real product is financial credibility for crypto-native India.

    How it's made

    Challenges we ran into **1. Cairo u256 ≠ Solidity u256** Starknet uses `u256 { low: u128, high: u128 }`. Ethereum just has `uint256`. When we bridged the tax value from Cairo to Solidity via L2→L1 messaging, the Ethereum contract read garbage values because we didn't pack/unpack correctly. **Fix:** Split the u256 into two uint128 values in the Cairo message payload, then reconstructed it in Solidity as `(high * 2^128) + low`. Took 3 failed message consumptions to debug. ---------------------------- **2. Starknet L2→L1 messages don't appear instantly** The proof gets committed on Starknet, then bridged to Ethereum via `send_message_to_l1_syscall`. But the message doesn't show up in Starknet Core immediately - you have to wait for finalization. **Fix:** Added a polling loop in the frontend that checks `isVerified()` every 10 seconds. Shows the user a spinner with "waiting for Starknet finalization" instead of letting them spam the verify button. ---------------------------