Trustless P2P crypto ↔ INR off-ramp world mini app for India using UPI + Pluto TEE Web Proofs.
A P2P on/off-ramp for Indian users on WorldChain, powered by UPI + Pluto TEE-based Web Proofs.
ShieldRamp enables verified humans on WorldChain to seamlessly off-ramp crypto into INR via UPI. The system leverages World ID verification to ensure one-human-one-account and Pluto TEE-based Web Proofs to securely prove off-chain UPI payments on-chain.
client/)@worldcoin/minikit-js and @worldcoin/minikit-react to run inside World App.GET /api/nonce issues a cookie-stored nonce, POST /api/complete-siwe verifies with verifySiweMessage.MiniKit.commandsAsync.verify(...) with Orb level, then used to call on-chain registrar.MiniKit.commandsAsync.sendTransaction(...) directly to WorldChain using ABIs from client/utils/constants.js.viem against worldchain RPC; event history hydrated via getLogs and parseAbiItem.@plutoxyz/frame-js embeds a TEE browser session that automates Amazon Pay history, extracts receipt fields, and produces a signed Web Proof. The proof JSON is fed to the contract through claimFunds.contracts/)escrowV1.sol implements the core flow:
ISignatureTransfer) via depositFunds(permit, details, sig); funds tracked per depositId.signalIntent(depositId, amount) with 24h expiry and single active intent constraint.claimFunds(input, signature) verifies Pluto attestation on-chain using PlutoAttestationVerifier and transfers WLD to buyer, marking the UPI tx as claimed to prevent replay. Emits rich events for UI history.withdrawRemainingFunds for unused liquidity.plutoVerifier.sol contains:
Verifier which gates trusted notary addresses and verifies ECDSA signatures over a digest computed from session+script hashes; prevents duplicate proof reuse per-digest mapping.PlutoAttestationVerifier that reconstructs scriptHash, sessionHash, and digest, checks signer, and returns boolean to escrowV1.L2RegistrarWIthWorld.sol (demo): World ID proof gating for username-style registrations; shows how the same MiniKit World ID payload maps to on-chain register(...).client/app/api/)nonce/route.js: secure nonce cookie for SIWE.complete-siwe/route.js: verifies SIWE with @worldcoin/minikit-js.verify/route.js: optional server-side World ID cloud verification via verifyCloudProof for off-chain checks.permit2: [...] in the transaction call while still supplying a placeholder signature arg to match the escrow ABI, simplifying WLD approvals inside World App.data attribute, and proves only the minimal fields required on-chain: paymentStatusTitle, paymentTotalAmount, receiverUpiId, upi_transaction_id.viem.getLogs across a moving block window to stay responsive inside a mobile mini app.
