Every M-Pesa number is already a Cardano address.

Type a Kenyan phone number and send USDCx or USDM. The person on the other end just gets a normal M-Pesa text — nothing to install, nothing to set up. It's live now on Cardano Preview testnet.

47.7M
M-Pesa numbers reachable
2
On-chain steps per send
Apache 2.0
Resolver license, once it ships
✓ M-Pesa confirmed
KES 2,450 · to 0712 ••• 678
Good evening
John
J
Total balance
KES 9,308
184.20 ADA · 40.00 USDM
Send
Pay Bill
Buy Goods
Receive
📱
Pay Bill · KPLC
2m ago · M-Pesa
−KES 850
Received USDM
1h ago · on-chain
+40.00
1 ADA ≈ KES 22.46
via Pyth · locked 60s
Rust · Axum · Tokio
Pallas (Ed25519)
Pyth Hermes
Safaricom Daraja
Africa's Talking USSD

Two on-chain transactions, one M-Pesa SMS

Every payment happens as two separate transactions on-chain: one locks the rate, one settles it. Neither step asks you to just trust Dzi's backend.

Resolve the number

HMAC-SHA256(secret, phone) turns the phone number into an Ed25519 keypair through Pallas, instantly and without the owner doing anything.

Lock the rate

Dzi queries a live Pyth price feed and locks the ADA/KES or USDCx/KES rate for 60 seconds. You can check that rate on-chain yourself instead of taking Dzi's word for it.

Settle to M-Pesa

The stablecoin moves to the resolved address, and Dzi relays the payout through Safaricom's Daraja API. All the recipient sees is a normal M-Pesa text.

Built on the rails people already trust

By 2023, M-Pesa had processed 20 billion transactions, equal to 59% of Kenya's GDP, through a USSD menu that works on any phone. Dzi rides those same rails.

Stablecoins, not volatility

USDCx and USDM don't move in value between confirmation and settlement, so the amount you agreed to is the amount that arrives — unlike a Bitcoin Lightning payment.

Oracle-verified rate

A Plutus contract checks a live Pyth price attestation before it'll authorize a payment, so you can verify the rate yourself instead of taking Dzi's word for it.

No smartphone required

USSD still carries roughly nine in ten mobile money transactions in Sub-Saharan Africa, so that's what Dzi's access layer runs on too.

Derive a real Cardano address from a phone number

This is the real resolver logic from core/address_resolver.rs, running live: HMAC-SHA256 into an Ed25519 seed, Blake2b-224 into a Shelley Enterprise address, bech32-encoded.

Try any valid Kenyan number. Nothing gets stored, and this demo runs on its own key, completely separate from Dzi's production secret.

⚠ Demo-only — always derives a Cardano Preview testnet address, and does not touch Dzi's live custody system.
Your derived address will appear here.
This is Dzi's actual resolver code, running live

The resolver will be open source.

Apache 2.0. Any Cardano wallet or app will be able to use it as-is, instead of building phone-number resolution from scratch.