KYC-free payments using on-chain proof on Base network
ProofPay is a decentralized payment platform that leverages Ethereum Attestation Service (EAS) on the Base network to enable secure, verified payments without traditional KYC processes.
- Privacy-Preserving: Use on-chain attestations instead of sharing personal documents
- Policy-Based Verification: Flexible proof requirements with trusted issuers
- Session Management: Complete lifecycle from creation to execution
- Fast & Cheap: Built on Base L2 for lightning-fast transactions with minimal fees
- Upgradeable: All contracts use UUPS proxy pattern for future improvements
- Multiple Proof Types: Support for EAS attestations, ZK proofs, and signatures
Core Contracts:
- PolicyManager: Manages payment policies with flexible proof requirements
- SessionManager: Handles payment session lifecycle with proof verification
Key Features:
- Multiple proof types (EAS attestations, ZK proofs, signatures)
- Policy-based verification with trusted issuers
- Session lifecycle management (Pending → Verified → Executed)
- Automatic expiration and refund handling
- UUPS upgradeable proxy pattern
- RESTful API for user and payment management
- EAS integration service
- Web3 blockchain interactions
- Real-time transaction monitoring
- Modern, responsive UI
- Web3 wallet integration (MetaMask, etc.)
- Real-time transaction updates
- Attestation verification interface
- Node.js v18+
- Python 3.11+
- Foundry (for smart contracts)
- MongoDB (for backend)
1. Create a Payment Policy:
// Policy with KYC requirement
uint256 policyId = policyManager.createPolicy(
"KYC Required",
"Payments require valid KYC attestation",
block.timestamp, // Valid from now
0, // No expiration
1 // Minimum 1 proof required
);
// Add EAS attestation requirement
policyManager.addProofRequirement(
policyId,
ProofType.EASAttestation,
kycSchemaUID,
trustedIssuer,
true, // Required
30 days // Validity period
);2. Create a Payment Session:
// Create session with 1 ETH payment
bytes32 sessionId = sessionManager.createSession{value: 1 ether}(
payeeAddress,
address(0), // Native ETH
1 ether,
policyId,
block.timestamp + 7 days, // Expires in 7 days
"Payment for services"
);3. Attach Proof and Execute:
// Attach EAS attestation
sessionManager.attachProof(
sessionId,
ProofType.EASAttestation,
attestationUID,
issuer,
0 // No expiration
);
// Verify session
bool verified = sessionManager.verifySession(sessionId);
// Execute payment
sessionManager.executeSession(sessionId);- Clone the repository
git clone https://github.com/yourusername/ProofPay.git
cd ProofPay- Install smart contract dependencies
cd contracts
forge install
forge build- Install backend dependencies
cd ../backend
pip install -r requirements.txt
cp .env.example .env
# Edit .env with your configuration- Install frontend dependencies
cd ../frontend
yarn install
cp .env.example .env
# Edit .env with your configuration- Start backend
cd backend
uvicorn server:app --reload --port 8001- Start frontend
cd frontend
yarn start- Deploy contracts (local)
cd contracts
anvil # Start local node
forge script script/DeployBase.s.sol --rpc-url http://localhost:8545 --broadcast- Smart Contracts Documentation
- API Reference
- EAS Integration Guide
- Development Roadmap
- Contributing Guidelines
cd contracts
forge test -vvv
forge coveragecd backend
pytest tests/ -v --covcd frontend
yarn test- All smart contracts are upgradeable using UUPS pattern
- Reentrancy protection on all payment functions
- Regular security audits (coming soon)
- Bug bounty program (coming soon)
- Network: Base Sepolia
- Chain ID: 84532
- RPC: https://sepolia.base.org
- Explorer: https://sepolia.basescan.org
- EAS Registry:
0x4200000000000000000000000000000000000021
Contract Addresses (Testnet):
PolicyManager Proxy: 0xC879C9fe4Dd2ec91125074CE98E64b44218EB970
SessionManager Proxy: 0x4c03a6C94D75933AA7793489CFAf32b646A36887
EAS Registry: 0x4200000000000000000000000000000000000021
- Network: Base Mainnet
- Chain ID: 8453
- RPC: https://mainnet.base.org
- Explorer: https://basescan.org
- EAS Registry:
0x4200000000000000000000000000000000000021
Contract Addresses (Mainnet):
PolicyManager Proxy: 0x553c710b560344ad6B9e674BC963120b0b9DC571
SessionManager Proxy: 0x2dDE05bfaB88Ce59Eebc317Dd81E05288bBcbF84
EAS Registry: 0x4200000000000000000000000000000000000021
- Set up environment variables:
export PRIVATE_KEY="your-private-key"
export BASE_SEPOLIA_RPC_URL="https://sepolia.base.org"- Deploy to Base Sepolia:
cd contracts
forge script script/DeployBase.s.sol:DeployBase \
--rpc-url $BASE_SEPOLIA_RPC_URL \
--broadcast \
--verify \
-vvvv- Deploy to Base Mainnet:
export BASE_MAINNET_RPC_URL="https://mainnet.base.org"
forge script script/DeployBase.s.sol:DeployBase \
--rpc-url $BASE_MAINNET_RPC_URL \
--broadcast \
--verify \
-vvvvDeployment info is automatically saved to deployments/ directory.
We welcome contributions! Please see our Contributing Guidelines for details.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Ethereum Attestation Service for the attestation infrastructure
- Base for the fast and cheap L2 network
- OpenZeppelin for secure smart contract libraries
- Foundry for the blazing fast development framework
- Website: proofpay.io (coming soon)
- Twitter: @ProofPay
- Discord: Join our community
Built with ❤️ on Base