P2P Naira ↔ STRK Marketplace. Send ₦ via any Nigerian bank — receive STRK instantly on-chain.
- Seller locks STRK in an on-chain escrow with their bank account number and NGN price.
- Buyer sends Naira via any Nigerian bank (Opay, PalmPay, Kuda, Moniepoint, GTBank, etc.).
- The Eigen TEE calls the Paystack API to verify the transfer and signs the receipt.
- The signed proof is submitted on-chain, validated against the escrow, and STRK is released to the buyer.
┌─────────────┐ deposit STRK + account no. ┌──────────────────┐
│ Seller │ ──────────────────────────────► │ Starknet │
│ │ │ Escrow Contract │
└─────────────┘ └────────┬─────────┘
│
┌─────────────┐ Naira bank transfer (off-chain) │
│ Buyer │ ──────────────────────────► │
│ │ Opay / PalmPay / Kuda / │
│ │ Moniepoint / GTBank / etc. │
└──────┬──────┘ │
│ claim_funds(signature, receipt) │
└─────────────────────────────────────────────────┘
│
▼
┌──────────────────┐
│ Eigen TEE │
│ - Paystack API │
│ - Verifies txn │
│ - Signs receipt │
└──────────────────┘
- Deposit – Seller locks STRK, sets their bank account number and price per STRK in NGN.
- Signal Intent – Buyer signals intent to buy (1-hour lock).
- Pay – Buyer sends Naira to seller's account via any Nigerian bank.
- Verify & Sign – Buyer pastes the Paystack transaction reference. TEE calls Paystack API, confirms the transfer, and signs the receipt.
- Claim – Buyer submits the signed proof on-chain; contract validates and releases STRK.
Any Nigerian bank that processes transfers through Paystack:
- Opay
- PalmPay
- Kuda
- Moniepoint
- GTBank
- Access Bank
- Zenith Bank
- First Bank
- UBA
- And all other NIBSS-connected banks
| Resource | URL |
|---|---|
| Contract (Voyager) | 0x045f0dda5b49e8c994aceeb74f08dcbd47da88cd1ab2085221e76e3f78466c45 |
| Deploy Transaction | 0x034cb779c35ce0fd2b2fe315ecd793230179cf69e262d1752720eb303b1a09bd |
| Class Hash | 0x6ff5c9ddc6a50950771f4b0c666ef2487b9452a1f9f41e4d0a23d56cfb2f5b3 |
| Declare Transaction | 0x3355507bce26aa13bfc1e7286651c4b49933e543643743be9c0960fe0b79099 |
Constructor args:
signer_public_key:0xd84917d613a8307d167e409503d85bef759f26bbf92cd87e1c994731a104c5token_address(Sepolia STRK):0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d
Zappay/
├── src/ # Cairo smart contracts (Starknet)
├── eigentee/ # Eigen TEE service (Paystack API + Express)
├── frontend/ # React + StarkZap frontend
└── README.md
scarb build
scarb test
src/lib.cairodeclares the escrow module and is required as the Scarb crate root.
cd eigentee
npm install
cp .env.example .env # Set MNEMONIC and PAYSTACK_SECRET_KEY
npm run build && npm startGet your Paystack secret key from dashboard.paystack.com.
cd frontend
npm install
cp .env.example .env # Set VITE_ESCROW_ADDRESS, VITE_TEE_SERVER
npm run devProduction build:
cd frontend
npm run build- Smart contracts – Cairo on Starknet (Sepolia testnet)
- Wallet – Cartridge Controller via StarkZap SDK (
starkzap) - TEE – Eigen TEE with Paystack API for Nigerian bank transfer verification
- Frontend – React + Vite, white/orange UI theme
Denominated in NGN (Nigerian Naira ₦). Live STRK/NGN rates fetched from CoinGecko every 60 seconds.
- TEE attestation – The Eigen TEE is attested; the signing key never leaves the enclave.
- Nullifiers – Each transaction reference can only be used once on-chain.
- Intent expiry – Buyer has 1 hour to complete payment and claim after signaling intent.
Zappay includes a built-in helper bot (the ? button at the bottom-right). Supported topics:
| Topic | Example phrases |
|---|---|
| About the app | "what is zappay", "how does this work", "explain" |
| Buying STRK | "how do i buy", "buy strk", "i want to buy" |
| Selling STRK | "how do i sell", "sell strk", "create order" |
| Signal Intent | "signal intent", "what is intent", "reserve order" |
| TEE verification | "what is tee", "how is payment verified", "verification" |
| Withdrawing | "withdraw", "get my strk back", "cancel sell order" |
| Wallet | "connect wallet", "cartridge", "how to connect" |
| Cancel intent | "cancel intent", "change my mind", "undo intent" |
| Price / rate | "price", "rate", "naira", "strk price", "ngn" |
| Safety | "safe", "secure", "scam", "can i get scammed" |
| Testnet | "sepolia", "testnet", "test", "real money" |
| Faucet | "faucet", "get strk", "free strk", "test strk" |
| Trade history | "history", "past orders", "settled", "completed" |
| Transfers | "transfer", "send strk", "send to friend" |
MIT