Skip to content
Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

1,573 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

ProxyPay ↔ Stellar Bridge

CI codecov License: MIT

A backend service that bridges African mobile money providers (MTN MoMo, Airtel Money, Orange Money) with the Stellar blockchain network β€” enabling low-cost cross-border payments and remittances across Africa and beyond.

🌟 The Problem

Sending money across African borders is expensive and slow. Traditional remittance services charge 7–10% in fees and take hours to days. Meanwhile, 500+ million people across Africa already use mobile money for everyday transactions β€” but mobile money stops at the border.

πŸ’‘ The Solution

ProxyPay connects mobile money wallets to the Stellar blockchain, allowing users to:

  1. Deposit mobile money (XAF) β†’ receive Stellar tokens (XLM, USDC)
  2. Transfer tokens across Stellar's network in ~5 seconds, for fractions of a cent
  3. Withdraw Stellar tokens β†’ receive mobile money in the destination country

The sender and recipient interact with their familiar mobile money apps. Stellar handles the cross-border settlement invisibly.

  πŸ“± MTN MoMo (Cameroon)                           πŸ“± Airtel Money (Kenya)
         β”‚                                                  β–²
         β–Ό                                                  β”‚
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚                       ProxyPay Bridge                          β”‚
  β”‚                                                                 β”‚
  β”‚   Deposit (XAF β†’ USDC)  ──►  Stellar Network  ──►  Withdraw    β”‚
  β”‚                              (settles in ~5s)                   β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Use Cases

  • Remittances β€” Send money home across borders at ~1–2% vs 7–10% with traditional services
  • Cross-border B2B payments β€” Pay suppliers in other African countries without expensive wire transfers
  • Stable savings β€” Convert volatile local currency to USDC via mobile money
  • Merchant payments β€” Accept crypto, settle in local mobile money
  • Developer integrations β€” Build payment apps on top of our REST + GraphQL APIs

πŸš€ Key Features

Core Platform

  • Mobile Money Integration β€” MTN MoMo, Airtel Money, Orange Money with circuit breaker, failover, and batch payouts
  • Stellar Blockchain β€” XLM, USDC, and custom asset support via Stellar SDK + Horizon API
  • Dual API β€” REST (40+ endpoints) and GraphQL (queries, mutations, and real-time subscriptions)
  • Real-time Processing β€” BullMQ job queues with Redis, admin dashboard at /admin/queues
  • WebSocket β€” Live transaction updates with JWT auth, per-user rooms, and Redis pub/sub for horizontal scaling
  • Provider Mock Server β€” Full mock for MTN + Airtel APIs for local development without real credentials

Security & Compliance

  • Multi-tier KYC β€” Tiered identity verification with document upload (S3) and third-party verification (Entrust)
  • AML Monitoring β€” Auto-flagging of suspicious patterns (large transactions, rapid structuring, daily totals)
  • Travel Rule Compliance β€” FATF travel rule data collection for qualifying transactions
  • GDPR / Privacy β€” Data export, deletion, and consent management endpoints
  • Sanctions Screening β€” Automated screening against sanctions lists
  • 2FA (TOTP) β€” Time-based one-time passwords via Speakeasy, required for withdrawals
  • RBAC β€” Role-based access control via Casbin
  • Rate Limiting & Audit Logging β€” Multi-layer rate limiting with full audit trail
  • PII Encryption β€” AES-256-GCM encryption for sensitive data at rest

Financial Engine

  • Dynamic Fee Engine β€” Configurable fee strategies with VIP tiers (25KB+ fee strategy engine)
  • Transaction Limits β€” Provider-specific and KYC-tiered daily limits
  • Vault System β€” Secure fund storage with distributed locking
  • Double-Entry Ledger β€” Internal accounting system with full transaction journal
  • Dispute Management β€” Complete dispute workflow with state machine
  • Monthly Statements β€” Automated PDF statement generation
  • Reconciliation β€” Provider reconciliation workflows

Stellar Protocol (SEP) Support

  • SEP-06 β€” Deposit and Withdrawal API
  • SEP-10 β€” Web Authentication (challenge-response)
  • SEP-12 β€” KYC API (customer CRUD with document upload)
  • SEP-24 β€” Interactive Deposit and Withdrawal (hosted flow)
  • SEP-31 β€” Cross-Border Payments (send-side anchor)

Smart Contracts

  • Escrow Contract β€” Soroban smart contract for escrowed payments (Rust)
  • HTLC Contract β€” Hash Time-Locked Contract for atomic cross-chain swaps (Rust)

Notifications

  • Email β€” SendGrid integration
  • SMS β€” Twilio integration
  • Push Notifications β€” Firebase Cloud Messaging
  • WhatsApp β€” Twilio WhatsApp channel
  • PagerDuty β€” Operational alerting

Developer Tools

  • CLI (momo-cli) β€” Admin tool for auth, status checks, and transaction retries
  • Kotlin SDK β€” Auto-generated from OpenAPI spec
  • Postman Collections β€” Pre-built API collections for testing
  • VS Code Extension β€” Transaction monitor with live WebSocket logs
  • Swagger UI β€” Auto-generated from Zod schemas at /docs (dev mode)

πŸ“‹ Prerequisites

  • Node.js 20+ (LTS)
  • PostgreSQL 16+
  • Redis 7+
  • Docker (optional, recommended for local dev)

πŸ› οΈ Quick Start

1. Clone & Install

git clone https://github.com/sublime247/proxypay.git
cd proxypay
npm install

2. Configure Environment

cp .env.example .env

Edit .env with your configuration (see .env.example for all ~470 configuration options):

# Database
DATABASE_URL=postgresql://user:password@localhost:5432/proxypay_stellar

# Redis
REDIS_URL=redis://localhost:6379

# Stellar
STELLAR_NETWORK=testnet  # or 'mainnet'
STELLAR_HORIZON_URL=https://horizon-testnet.stellar.org
STELLAR_ISSUER_SECRET=S...

# Mobile Money Providers
MTN_API_KEY=your_mtn_api_key
AIRTEL_API_KEY=your_airtel_key
ORANGE_API_KEY=your_orange_key

# Security
JWT_SECRET=your_jwt_secret_min_32_chars
SESSION_SECRET=your_session_secret

# Optional: Notifications
SENDGRID_API_KEY=your_sendgrid_key
TWILIO_ACCOUNT_SID=your_twilio_sid

3. Setup Database

npm run migrate:up
npm run seed  # Optional: development data

4. Run

Development (with provider mocks):

npm run docker:dev   # Starts app + Postgres + Redis + provider mock server

Development (standalone):

npm run dev

Production:

npm run build
npm start

Server starts at http://localhost:3000

πŸ§ͺ Testing

npm test                    # Unit tests (Jest)
npm run test:coverage       # With coverage report
npm run test:watch          # Watch mode
npm run test:e2e            # End-to-end (Playwright)
npm run test:load           # Load testing (k6 / autocannon)
npm run test:mutation       # Mutation testing (Stryker)

Test infrastructure includes:

  • Unit & integration tests across controllers, services, middleware, routes
  • Pact consumer-driven contract tests for provider APIs
  • Playwright end-to-end tests
  • k6 load/stress tests with benchmarking against Go vs Node ingest services
  • Stryker mutation testing
  • Fuzz testing

Coverage reports upload to Codecov on every push to main.

πŸ“š API Documentation

Interactive Docs (Development Only)

Start the dev server and visit:

  • Swagger UI: http://localhost:3000/docs
  • OpenAPI JSON: http://localhost:3000/docs/openapi.json

The API spec is auto-generated from Zod validation schemas at runtime β€” no manual YAML to maintain.

Core Endpoints

# Health
GET  /health                          # Liveness probe
GET  /ready                           # Readiness (DB + Redis)
GET  /health/lb                       # Load balancer health

# Transactions
POST /api/transactions/deposit        # Mobile money β†’ Stellar
POST /api/transactions/withdraw       # Stellar β†’ Mobile money
GET  /api/transactions                # List (paginated, filterable)
GET  /api/transactions/:id            # Transaction details
GET  /api/transactions/:id/invoice    # Download completed transaction invoice
POST /api/transactions/:id/cancel     # Cancel pending transaction
POST /api/transactions/:id/dispute    # Open dispute
POST /api/transactions/bulk           # Bulk operations

# Auth
POST /api/auth/register               # Register
POST /api/auth/login                  # Login (returns JWT)
POST /api/auth/2fa/enable             # Enable TOTP 2FA
POST /oauth/token                     # OAuth2 client credentials

# KYC
POST /api/kyc/submit                  # Submit documents
GET  /api/kyc/status                  # Check verification status

# Vaults
POST /api/vaults                      # Create vault
GET  /api/vaults                      # List vaults
POST /api/vaults/:id/transfer         # Deposit/withdraw funds

# Disputes
GET  /api/disputes                    # List disputes
PUT  /api/disputes/:id                # Update dispute status

# Compliance
GET  /api/v1/compliance/travel-rule   # Travel rule data
GET  /api/gdpr/export                 # GDPR data export
DELETE /api/gdpr/delete               # Right to be forgotten

# Stellar SEP Endpoints
POST /sep10/auth                      # SEP-10 authentication
GET  /sep12/customer                  # SEP-12 KYC
POST /sep24/transactions/deposit/interactive  # SEP-24 deposit
POST /sep31/transactions              # SEP-31 cross-border

# Admin
GET  /api/admin/*                     # Admin dashboard endpoints
GET  /api/stats                       # Transaction statistics
GET  /api/reconciliation              # Provider reconciliation
GET  /metrics                         # Prometheus metrics

GraphQL

POST /graphql

Playground: http://localhost:3000/graphql (dev only)

πŸ” Security

Transaction Limits

Type Limit Purpose
Minimum 100 XAF Prevent spam
Maximum 1,000,000 XAF Fraud prevention

KYC-Based Daily Limits

Level Daily Limit Requirements
Unverified 10,000 XAF Email only
Basic 100,000 XAF ID + selfie
Full 1,000,000 XAF Proof of address + video

πŸ—οΈ Architecture

Tech Stack

Layer Technology
API Server Node.js, TypeScript, Express, Apollo Server (GraphQL)
Database PostgreSQL 16 (primary + read replicas), Redis 7 (cache, sessions, pub/sub)
Blockchain Stellar SDK, Horizon API, Soroban smart contracts (Rust)
Job Processing BullMQ workers, node-cron scheduled jobs
Ingest (High-throughput) Go service (fasthttp) + Node.js service (Fastify), Redis Streams, NATS JetStream
Security Helmet, bcrypt, JWT, Speakeasy (TOTP), Casbin (RBAC), AES-256-GCM (PII)
Monitoring Prometheus, Datadog (dd-trace), Sentry, PagerDuty
Logging Structured JSON β†’ Loki/Grafana (primary), ELK stack (secondary)
Edge Cloudflare Workers (.well-known caching)
Infrastructure Docker, Kubernetes (+ Helm, KEDA), Terraform (AWS)
CI/CD GitHub Actions (lint, test, build, deploy, rollback)

Project Structure

proxypay/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ auth/              # Authentication & authorization
β”‚   β”œβ”€β”€ compliance/        # Travel rule, sanctions
β”‚   β”œβ”€β”€ config/            # Centralized configuration
β”‚   β”œβ”€β”€ constants/         # Error codes, enums
β”‚   β”œβ”€β”€ controllers/       # Request handlers
β”‚   β”œβ”€β”€ crypto/            # Encryption utilities
β”‚   β”œβ”€β”€ graphql/           # Schema, resolvers, subscriptions, APQ cache
β”‚   β”œβ”€β”€ jobs/              # Scheduled & background jobs
β”‚   β”œβ”€β”€ locales/           # i18n translations
β”‚   β”œβ”€β”€ middleware/        # Auth, RBAC, rate limiting, audit, error handling
β”‚   β”œβ”€β”€ models/            # Database models (15 models)
β”‚   β”œβ”€β”€ openapi/           # Auto-generated API docs (Zod β†’ OpenAPI)
β”‚   β”œβ”€β”€ queue/             # BullMQ job queue management
β”‚   β”œβ”€β”€ reports/           # Statement & report generation
β”‚   β”œβ”€β”€ routes/            # API routes (40+ route files, versioned)
β”‚   β”œβ”€β”€ services/          # Business logic (58 service files)
β”‚   β”‚   β”œβ”€β”€ mobilemoney/   # MTN, Airtel, Orange providers + orchestration
β”‚   β”‚   └── stellar/       # Stellar operations, asset management, HSM
β”‚   β”œβ”€β”€ stellar/           # SEP protocol implementations (6, 10, 12, 24, 31)
β”‚   β”œβ”€β”€ types/             # TypeScript type definitions
β”‚   β”œβ”€β”€ utils/             # Helpers & utilities
β”‚   └── websocket/         # WebSocket server (JWT auth, Redis scaling)
β”œβ”€β”€ contracts/             # Soroban smart contracts (Escrow, HTLC)
β”œβ”€β”€ ingest-go/             # High-performance Go callback ingestion
β”œβ”€β”€ ingest-node/           # Node.js baseline for benchmarking
β”œβ”€β”€ workers/               # Cloudflare Workers (edge caching)
β”œβ”€β”€ cli/                   # CLI admin tool (momo-cli)
β”œβ”€β”€ sdk/                   # Auto-generated Kotlin SDK
β”œβ”€β”€ benchmarks/            # k6 load testing suite
β”œβ”€β”€ bridge-starter-node/   # Webhook bridge starter template
β”œβ”€β”€ docs/                  # Extensive documentation (59 docs)
β”œβ”€β”€ extensions/            # VS Code transaction monitor extension
β”œβ”€β”€ postman/               # API testing collections
β”œβ”€β”€ migrations/            # Database migrations (47 migrations)
β”œβ”€β”€ k8s/                   # Kubernetes manifests + Helm chart
β”œβ”€β”€ terraform/             # AWS infrastructure (VPC, ECS, RDS, ElastiCache)
β”œβ”€β”€ elk/                   # ELK stack config (Filebeat, Logstash, Kibana)
β”œβ”€β”€ logging/               # Loki + Grafana + Promtail config
β”œβ”€β”€ scripts/               # Operational scripts (mock server, DB scrub, etc.)
└── tests/                 # Test suites (unit, integration, e2e, pact, fuzz)

πŸ”„ Database

Migrations

npm run migrate:create -- migration_name  # Create
npm run migrate:up                        # Run all pending
npm run migrate:down                      # Rollback last
npm run migrate:status                    # Check status

🚒 Deployment

Docker

# Development (with mocks, hot reload, Grafana)
docker compose up

# Production build
docker build -t proxypay:latest .
docker run -p 3000:3000 --env-file .env proxypay:latest

Kubernetes

kubectl apply -f k8s/

Terraform (AWS)

cd terraform
cp terraform.tfvars.example terraform.tfvars
terraform init
terraform plan -var-file=environments/production.tfvars
terraform apply

🀝 Contributing

We welcome contributions! See CONTRIBUTING.md.

Good First Issues

Check good first issue label.

πŸ“ License

MIT License β€” see LICENSE file.

πŸ™ Acknowledgments

πŸ“ž Support


Built with ❀️ for financial inclusion in Africa

About

ProxyPay - Mobile Money to Stellar bridge

Resources

Contributing

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages