More than 50% of Africa still uses a feature phone. Entry-level handsets. Devices that cost $20-30 and run a lightweight OS built for d-pad navigation, small screens, and 2G connectivity. The people who use them are in Nigeria, in Pakistan, in Bangladesh. They send money home. They pay bills. They hold value outside of banking systems that don’t serve them well.
None of them have access to Web3. Not because they chose not to. Because nobody built for their phone.
Sorted did.
The Constraint Is the Product
When you build for a feature phone device, the constraint is total. The app has to be lightweight, even as low as 10MB. The interface has to work without a touch screen. Connectivity is unreliable. Every design decision flows from the device, not from what would be nice to have.
This is different from building a “lite” version of an existing app. There is no full version to strip down. You start from the constraint and build up. What survives is exactly what the user needs: send, receive, pay, cash out. Nothing else.
Sorted is the first non-custodial wallet to ship on KaiOS. The same wallet is now on Android, at 10MB. The lightest full-featured crypto wallet on Google Play. The size isn’t a limitation. It is the product.
Gas Abstraction Is Not Optional Here
Sorted’s users hold USDT and Bitcoin. Not ETH.
On a feature phone in Lagos or Karachi, the idea of acquiring ETH to pay gas fees is not inconvenient. It is a product-ending requirement. There is no exchange app. There is no easy on-ramp. You are asking a user to acquire a volatile speculative asset they have no use for, just to use the asset they already have.
Before integrating Candide’s infrastructure, every transaction on Sorted’s smart accounts required ETH for gas. That model doesn’t work for this user.
With Candide’s bundler and paymaster, gas is handled at the infrastructure level. Users pay in USDT, or transactions are sponsored entirely. From the user’s side, there is no gas. There is just a transaction that works.
Batch transactions compound this. On a device with limited UX surface, doing two things in one confirmation. say, approving and transferring in a single step. matters more than it does on a flagship phone with a large screen and fast connectivity. AbstractionKit makes this composable. The interactions that would have required multiple steps and multiple gas payments happen in one.
Non-Custodial as the Baseline
Sorted’s users have already learned not to rely on institutions. In markets where banks restrict dollar withdrawals, where mobile money providers have frozen accounts, where inflation makes local currency savings unreliable. trusting a third party with your keys is not a feature trade-off. It is the same risk with a different interface.
Sorted’s accounts are non-custodial. The user holds the keys. Sorted cannot freeze the account. No one can compel access to the funds. That is not a selling point. For this user, it is the reason the product is worth using.
Candide processes transactions. It does not hold keys. The infrastructure layer has no custody over user funds, by design.
The Infrastructure Layer
Sorted runs on Candide’s bundler and paymaster, integrated through AbstractionKit. The bundler processes ERC-4337 UserOperations. The paymaster handles gas. accepting USDT or sponsoring transactions entirely. AbstractionKit provides the SDK layer that ties it together.
The stack is built on open standards. No proprietary contracts. No lock-in. If Sorted needs to change something, they can. The infrastructure is composable because ERC-4337 is a standard, not a platform.
What This Unlocks
The next wave of stablecoin adoption will not come from people switching from Coinbase. It will come from people who never had a bank account, on phones that cost $20, in markets where stablecoins are a better store of value than local currency.
Sorted is proof the infrastructure exists to serve them. Non-custodial accounts. Gas-free transactions. Batch operations. All in 10MB, on a Nokia.
If you are building for users who hold stablecoins and not ETH, on devices where every byte and every step matters: docs.candide.dev