What is ZKP2P?
ZKP2P is a decentralized protocol enabling trustless peer-to-peer exchanges between fiat currency and cryptocurrency. Users can on-ramp (buy crypto with fiat) or off-ramp (sell crypto for fiat) directly with counterparties, without intermediaries or centralized custody. The v2.1 smart contracts form the core infrastructure for the ZK P2P fiat on/off-ramp, centered around three main components:- Escrow: Manages liquidity deposits from makers
- Orchestrator: Coordinates the intent lifecycle and verification
- Unified Payment Verifier: Validates off-chain payment attestations for multiple payment methods
ZKP2P uses zero-knowledge proofs to verify payment receipts without exposing sensitive user data, ensuring privacy while maintaining trustlessness.
Key Features
Trustless P2P Trading
Direct fiat-to-crypto exchanges without intermediaries or custodians. Smart contracts guarantee settlement based on cryptographic proofs.
Multi-Platform Support
Support for 8+ payment platforms including Venmo, PayPal, Wise, Zelle, CashApp, Revolut, MercadoPago, and Monzo.
Zero-Knowledge Privacy
Payment verification without exposing sensitive data. zkTLS proofs validate transactions while preserving user privacy.
Intent-Based Architecture
Efficient liquidity matching and settlement through an intent-based system. Makers provide liquidity, takers signal intent to trade.
Modular Design
Pluggable verifiers and extensible registry system. Easy to add new payment methods and customize verification logic.
EIP-712 Attestations
Standardized, typed data signing for off-chain payment proofs that integrate seamlessly with on-chain verification.
Use Cases
On-Ramp: Buy Crypto with Fiat
Users can purchase USDC with fiat currency through verified payment platforms. The process is simple:- Find a maker’s deposit with your preferred payment method
- Signal your intent to buy a specific amount
- Send fiat payment off-chain through the payment platform
- Submit payment proof to unlock USDC on-chain
Off-Ramp: Sell Crypto for Fiat
Liquidity providers (makers) can deposit USDC to earn fees by facilitating trades:- Create a deposit with supported payment methods and rates
- Configure minimum/maximum trade amounts and accepted currencies
- Receive fiat payments from takers off-chain
- Earn protocol fees on successful trades
Cross-Border Payments
Access global liquidity through multiple payment rails. Users can:- Trade across different payment platforms (e.g., send USD via Venmo, receive EUR via Wise)
- Support for multiple fiat currencies per payment method
- Configurable conversion rates set by liquidity providers
How It Works
ZKP2P uses an intent-based trading model where:Maker Deposits Liquidity
A liquidity provider (maker) creates a deposit on the Escrow contract, specifying accepted payment methods, currencies, and conversion rates.
Taker Signals Intent
A buyer (taker) signals their intent to trade by locking the maker’s liquidity through the Orchestrator contract.
Off-Chain Payment
The taker sends fiat payment to the maker through the specified payment platform (e.g., Venmo, PayPal).
Payment Proof Generation
The payment receipt is converted to a zkTLS proof via an attestation service, which creates an EIP-712 signed attestation.
On-Chain Verification
The Unified Payment Verifier validates the attestation signatures and payment details against the intent parameters.
Protocol Security
ZKP2P incorporates multiple security mechanisms:- Reentrancy Guards: All critical functions use OpenZeppelin’s
ReentrancyGuard - Pausable Emergency Stop: Governance can pause intent creation and fulfillment while preserving fund recovery
- Double-Spend Prevention: Nullifier registry prevents payment proofs from being used multiple times
- Intent Expiration: Time-limited intents with configurable expiry periods prevent indefinite liquidity locks
- Signature Verification: EIP-712 typed data signatures for intent gating and attestation validation
- Whitelisted Registries: Controlled access for escrows, verifiers, and post-intent hooks
Supported Networks
ZKP2P is deployed across multiple networks:| Network | Status | Description |
|---|---|---|
| Base | ✅ Production | Live mainnet deployment for production use |
| Base Sepolia | ✅ Testnet | Public testnet for development and testing |
| Base Staging | 🔧 Staging | Internal staging environment for pre-production validation |
Contract addresses for each network can be found in the respective deployment directories in the GitHub repository.
Architecture Overview
The v2.1 architecture consists of several interconnected components: Each component serves a specific purpose:- Escrow: Secure fund custody and liquidity management
- Orchestrator: Intent lifecycle coordination and fee distribution
- Unified Payment Verifier: Multi-platform payment validation
- Registry System: Permission management and configuration
Token Support
Currently, ZKP2P v2.1 supports:- USDC (USD Coin) as the primary settlement token
- Multiple fiat currencies through payment platform verification
- Configurable conversion rates for fiat-to-crypto exchanges
The modular design allows for future expansion to support additional ERC20 tokens as deposit assets.
Getting Started
Ready to integrate with ZKP2P? Check out these resources:Quickstart Guide
Get up and running with local development in minutes
Architecture Deep Dive
Understand the complete system design and component interactions
API Reference
Explore contract interfaces and function signatures
GitHub Repository
View the source code and contribute to the protocol
Community & Support
- Website: zkp2p.xyz
- Documentation: docs.zkp2p.xyz
- GitHub: github.com/zkp2p
ZKP2P is an open-source project licensed under MIT. Contributions are welcome!