Skip to content
ProofOS

ProofOS

Verifiable income proofs for crypto India

Created on 14th March 2026

•

ProofOS

ProofOS

Verifiable income proofs for crypto India

The problem ProofOS 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.

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.


Tracks Applied (8)

Privacy

ZK-powered financial proofs - Generate cryptographic proofs of income, net worth, or tax liability without exposing a si...Read More

DeFi

Crypto-native financial credibility layer - Built infrastructure to make on-chain wealth usable in the real world. Get l...Read More

Best creative use of ENS

We use ENS clubs as an identity layer for multi-wallet financial proofs. Instead of just resolving names to addresses, ...Read More
Ethereum Name Service

Ethereum Name Service

Pool prize

We use ENS clubs to group multiple wallets under one identity, then generate consolidated tax and income proofs across a...Read More
Ethereum Name Service

Ethereum Name Service

Build What Big Tech Won't

We use Fileverse to publish verified tax certificates to decentralized storage. After generating a ZK proof and on-chain...Read More
Fileverse

Fileverse

DeFi 2.0 - New Primitives

Verifiable income proofs as a lending primitive The reason crypto lending is overcollateralized: lenders have no way to...Read More
Base

Base

Privacy

Privacy-preserving financial proofs on Base We ingest wallet activity from Base Sepolia, compute tax liability and inco...Read More
Base

Base

BEST Overall Project

Solves a core problem - Indian crypto holders can't use their wealth to get loans, visas, or pass audits. We built the f...Read More

Cheer Project

Cheering for a project means supporting a project you like with as little as 0.0025 ETH. Right now, you can Cheer using ETH on Arbitrum, Optimism and Base.

Discussion

Builders also viewed

See more projects on Devfolio