Development of Valora kicked off just over two years ago, at around the same time that work started in building the Celo protocol from a fork of go-ethereum. It has been a rollercoaster of a journey trying to build a mobile app on top of a platform that, until the last six months, can best be described as a “moving target”. In one sense the app was ready well before the protocol. From late 2018, it was being used in our first pilot in Argentina. In another sense, there was no way we were going to be able to launch it until after mainnet, once cUSD was activated and liquid.
The app has evolved a ton since those early days. We used pilots as a way of offsetting the difficulties that a crypto stack poses in iterating rapidly in response to user feedback. In fact, the app had undergone a couple of substantial redesigns even before its first public release. Check out these earlier designs:
We chased down Corey Lee, who’s driven the current design:
As for what’s next? In the weeks following the release, the team will continue to focus on improving quality, fixing bugs, addressing tech debt, and improving test coverage. Expect some new features to be landing soon as well, including profile photos, usernames, and additional cash-in/cash-out options.
The team craves your feedback. Join the discussion at #valora on Discord. We also strongly encourage you to check out a recent tech talk where he talks more about the app’s internals. Of course, you can also dig into the code!
Reliable verifications
One of Celo’s major usability innovations is the ability for users to optionally tie their phone number to their on-chain address, a process sometimes referred to as phone number verification. This allows wallet applications like Valora to deliver a payments experience similar to that of centralized services. Verification is the first step in the Valora onboarding flow, and as such it’s critical that the user experience is as smooth and seamless as possible. The engineering team has been working hard on improving this experience on two fronts; reliability, and cost.
By digging into data that combines analytics from Valora, user-submitted logs, on-chain data, plus metrics from validators’ attestation services key themes have emerged. One of the main obstacles to verification reliability has been SMS delivery. Valora users come from all over the world, and we’ve seen evidence that success rates for SMS providers like Twilio and Nexmo can be meaningfully different across geos. To understand this better, friends and family from across the world were enlisted to purchase SIMs and do manual testing.
We’re rolling these learnings into the codebase and the default configs that ship with Attestation Service 1.0.4. We’ve added support for delivery status receipts (so now if we receive an eventual failure from one provider, we can retry, possibly with another provider), country-code specific configuration, and improved documentation. The majority of validators have now upgraded and many are working on flushing out further failures. You can join in on Discord in the #attestation-service channel.
Free verifications
As with all things blockchain, phone number verification has an associated cost, payable in Celo Dollars (cUSD), to prevent denial-of-service attacks on validators. Unfortunately, this presents a chicken-and-egg problem; users need cUSD to pay for onboarding, but need to onboard before they can easily be sent cUSD. This problem is currently being solved via invitations; if Alice wants to invite Bob to join Valora, she funds an address with enough cUSD to pay for onboarding and sends him the private key. This approach has two drawbacks; inviting Bob to join Valora costs Alice money, and Bob is unable to join Valora without being invited. This isn’t the best user experience.
To make this experience better, we’ve been working on a fee-less attestations scheme that can cover the cost of transaction and verification fees. Critically, this is done in a way that minimizes the incentives for attacking the system, as these subsidies can only be used to pay for requesting verification codes.
A new, centralized onboarding service would determine eligibility, and create a MetaTransactionWallet contract that allows anyone to execute meta transactions on behalf of the owner so long as they are signed by the owner. The service would use this to execute the verification flow on behalf of a new Valora user. You can follow the progress in the #fee-less-onboarding Discord channel.