USDC payment gateway built natively on Arc: sub-second settlement, non-custodial, African merchant-first
# ArcPay
**USDC payment gateway built natively on Arc.**
Sub-second settlement. Non-custodial. Price in Dirham, Naira, Cedis, Shillings or Rand — settle in stable dollars. Two API calls to integrate.
---
## How it works
```
Merchant creates a payment → Customer pays USDC on-chain
↓ ↓
ArcPay smart contract Funds land in merchant wallet
fires a signed webhook in r.json());
// 2. Redirect your customer
window.location = payment_url;
```
The customer opens a hosted checkout, connects MetaMask, and pays. You receive a signed webhook when the transaction settles.
---
## Stack
| Layer | Technology |
|---|---|
| Smart contract | Solidity — deployed on Arc testnet |
| Backend API | Node.js / Express / SQLite |
| Frontend | React / TypeScript / Viem / wagmi |
| FX service | Node.js micro-service, live rates every 60 s |
| Infra | PM2 + Nginx, VPS-ready |
---
## Project structure
```
arcpay/
├── contracts/ # ArcPay.sol — atomic on-chain settlement (no escrow)
├── backend/ # REST API (merchants, payments, webhooks)
│ └── src/
│ ├── routes/ # auth · merchants · payments
│ ├── middleware/ # auth guard, rate limiter
│ ├── fx.js # live FX rates (AED / NGN / GHS / KES / ZAR)
│ ├── listener.js # on-chain event watcher
│ └── webhook.js # signed webhook dispatcher
├── frontend/ # React dashboard + hosted checkout
├── footie/ # Reference merchant integration (demo store, priced in AED)
├── ngn/ # FX micro-service (separate process)
├── nginx/ # Nginx site config
├── scripts/ # deploy, setup, e2e
└── test/ # Hardhat contract tests (27 passing)
```
---
## Run locally
**Prerequisites:** Node.js 18+, MetaMask, Arc testnet USDC
```bash
# 1. Install root deps (Hardhat)
npm install
# 2. Run contract tests
npx hardhat test
# 3. Start the backend
cd backend && npm install
cp .env.exa …