The Biggest Barrier in African Web3
Ask anyone building fintech for Africa about their biggest challenge, and you'll hear the same answer: the last mile.
Getting money in and out of crypto in Africa requires a smartphone, a wallet app, an exchange account, sometimes KYC documentation, and a reliable internet connection. For the 400 million Africans who use mobile money as their primary financial tool, the path to Web3 participation is long and filled with friction.
At Njangi House, we believe that if your grandmother can dial *126# to pay for groceries, she should be able to participate in a Web3 savings circle just as easily. Our MOMO integration, launching Q3 2026, makes that possible.
What is Mobile Money?
Mobile money (MOMO) allows users to store, send, and receive money via a SIM card-registered account β without a bank account. In Cameroon, MTN Mobile Money and Orange Money are the two dominant operators, with a combined user base of over 12 million active users as of 2025.
The system works through a USSD menu (those *126# codes) or dedicated apps, and allows transactions including:
- Person-to-person transfers
- Bill payments and airtime
- Merchant payments
- Bank-to-wallet and wallet-to-bank transfers
Mobile money is deeply embedded in daily African economic life. In Cameroon alone, over 10 million MOMO transactions occur daily.
Our Oracle Architecture
Bridging mobile money to the blockchain requires a trusted intermediary β what we call an oracle. The Njangi oracle service runs on Google Cloud Run and acts as a verifiable relay between the mobile money network and our smart contracts.
Here's how it works technically:
Step 1: Payment Detection
When a member sends MOMO to the designated Njangi House number, the Mobile Money operator sends a webhook to our oracle service. This webhook contains the transaction details: sender phone, amount, reference number, and timestamp.
Step 2: Signature and Registration
The oracle verifies the webhook signature (using HMAC-SHA256 with the operator's shared secret). If valid, it calls registerPayment() on our MomoOracle smart contract, logging the payment on-chain before any USDC moves.
Step 3: Exchange Rate Conversion
The oracle fetches the current XAF/USDC rate from the Yellow Card API. This rate is locked for 30 minutes to protect both the member and the house from price volatility during processing. The conversion uses the formula:
USDC amount = XAF amount Γ 10^6 / (XAF per USDC Γ 10^6)
The rate is also stored on-chain in the MomoOracle contract with a staleness threshold of 4 hours β if the rate hasn't been updated, the oracle rejects the transaction to prevent processing at stale prices.
Step 4: USDC Relay
The oracle then calls relayPayment() on the MomoOracle contract, which transfers the equivalent USDC from the oracle's liquidity pool to the target NjangiHouse contract. The relay also verifies an ECDSA signature from the oracle's signing key, ensuring that only authorized relays are processed.
Step 5: Anti-Replay Protection
Each MOMO transaction reference (e.g., CM-MTN-2026-03-01-ABC123) is stored on-chain in a mapping. If the same reference appears twice, the contract rejects the second call. This prevents double-counting of payments.
The ECDSA Security Model
A core concern with any oracle design is: what if the oracle is compromised? Our security model addresses this through layered protections:
On-chain signature verification: Every payment relay includes an ECDSA signature from the oracle's private key. The private key is stored in Google Cloud Secret Manager and never touches application memory directly. Even if an attacker gained access to the oracle server, they couldn't forge valid signatures without the private key.
Staleness protection: The exchange rate has a 4-hour validity window. An attacker cannot feed stale rates to extract value.
Daily volume limits: Each oracle relayer has a configurable daily USDC volume limit. Large payouts (>1,000 USDC) require multi-sig confirmation.
Audit trail: Every oracle action is logged to Firestore with full request/response details, enabling forensic analysis if anomalies are detected.
The User Experience
For a member in Douala, the experience is familiar:
- Receive notification: "Round 2 is open. Contribution: 25,000 XAF due by March 31."
- Open MTN MOMO app: Tap "Send Money" or dial *126#
- Send to Njangi number: Transfer 25,000 XAF to the designated house number
- Confirmation SMS: Within 60 seconds, receive: "Njangi House: Payment received. 25,000 XAF = 38.17 USDC. Credited to Famille Biya Savings - Round 2. Ref: NJH-2026-03-XYZ"
- 100 NKAP reward: On-chain transaction mints NKAP to your wallet (if connected)
No app download required for paying via MOMO. No crypto wallet. No KYC beyond what MTN/Orange already have.
Supported Operators and Regions at Launch
Q3 2026 Launch:
- MTN Mobile Money (Cameroon, Nigeria, Ghana, Rwanda, Uganda)
- Orange Money (Cameroon, CΓ΄te d'Ivoire, Senegal, Mali, Burkina Faso)
Q4 2026 Expansion:
- Airtel Money (Kenya, Tanzania, Zambia)
- M-Pesa (Kenya, Tanzania) via Daraja API
- Wave (Senegal, CΓ΄te d'Ivoire)
Currency Support (via Yellow Card):
- XAF (CFA Franc BEAC) β USDC
- GHS (Ghanaian Cedi) β USDC
- NGN (Nigerian Naira) β USDC
- KES (Kenyan Shilling) β USDC
- UGX (Ugandan Shilling) β USDC
What This Means for Adoption
The MOMO integration removes the single biggest barrier to participation for the core demographic Njangi House serves. Consider the numbers:
- 400M+ mobile money users in sub-Saharan Africa
- 12M+ MTN MOMO users in Cameroon alone
- 60% of Cameroonians use MOMO for regular payments
By allowing MOMO payments, we're not just adding a feature. We're opening the platform to its entire natural user base. A member who "chops" the pool can even receive their USDC payout converted back to XAF via MOMO β making the entire circle seamlessly Mobile Money-native.
The blockchain is infrastructure. For most users, it will be invisible. They'll just know that their njangi is more reliable, more transparent, and doesn't require anyone to physically collect cash.
Questions about the MOMO integration? Join our Telegram community or read the technical documentation.