Celo is building a mobile-first smart contract platform with a built-in stablecoin system to tackle financial inclusion in emerging economies. This post is a transcript of our Telegram chat with Marek Olszewski, CTO of C Labs, the company building the Celo platform. The Q&A took place as a follow-up to our podcast episode with Marek and covers the rationale and vision that lead to Celo, the platform's mobile-first approach, as well as staking, governance, transaction fee, and stablecoin designs:

Hi Marek, let's start with a warmup question: can you give us a quick overview of the Celo founding story? What did you feel was missing in other smart contract platforms that you wanted to improve on?

Sure! I started Celo with Rene Reinsberg and Sep Kamvar. We've all worked together before on a previous startup and were looking to do something new and mission focused and were searching for a while for a good project. We almost did something in the healthcare space, but the more we looked at financial inclusion, the more we realized that the timing was great to do something meaningful in that space right now.

Rene actually spent some time with the World Bank in Venezuela and saw first hand what life looked like without access to sound currency, and with the proliferation of smartphones, we knew that if we took a mobile first approach, we could do something to move the needle for people who have been traditionally excluded from the global financial infrastructure.

What made you decide a new blockchain is needed to address this problem?

We started with that approach actually, but quickly found that we couldn't build an experience that met the needs of our target users. Light client syncing was too slow, public-key based addresses too confusing, and transaction fees in volatile assets too unintuitive.

So we decided to build both a platform and a mobile app at the same time to address these difficult challenges.

To what extent do you see Celo as a full-blown smart contract platform? What kind of applications are you most keen on people building on Celo?

Celo is a fork of the go-ethereum codebase, and so it has full EVM compatibility. All your favorite Ethereum smart contracts can be deployed without changes. We also have a mobile-sdk that makes it easy to build native mobile dapps that interface with your smart contracts. We believe that dapps should be mobile-first and native apps that abstract the blockchain away and have worked hard to build a platform and SDK that makes that easy to accomplish.

One cool thing about Celo is that I can register my phone number and then people can send coins directly to me just by knowing my phone number. But I'm curious about the privacy implications of that. Does that mean that anybody who knows my phone number can also see my entire transaction history?

This depends on how your wallet registers your phone number. The platform supports two modes: One where you register just a communication key and one where you register your wallet and a communication key. In the case of the former, you can use the communication key to communicate securely and exchange wallet addresses in a double opt-in manner (e.g. friending someone). In the case of the latter, you save this extra step but expose your balance to people with your phone number.

To address this, the Celo community has explored using zk-SNARKs to add private transactions to the protocol. For more info, I pinned my slides from my talk at DevCon5 on my twitter profile: https://twitter.com/marekolszewski

Okay that makes sense. But let's say Alice just registers the communication key. And I want to send Alice some money but only know her phone number. Is that possible?

Yes! You can send a secret message to Alice by looking up her communication key by phone number to exchange wallet addresses. I should add that support for this mode in the Celo Mobile Wallet is still being added.

The protocol also allows you to send a payment to someone's phone number before they sign up, by having the payment sit in an escrow smart contract which can only be redeemed once a user verifies their phone number.

Could you please shed some light on the state of implementation of Celo's on-chain governance system? What parameters of the Celo blockchain can be changed, and how are proposals selected?

Celo's on-chain governance system is fully built and currently undergoing audits. It allows the community to vote on changes that can upgrade any of Celo's core system contracts (much of the Celo protocol is implemented in Solidity) and also the parameters used by the protocol.

It can also be used to change the minimum supported client version. This allows the community to push through changes to clients while allowing validators to upgrade their clients on their own time. We like this approach because we think that having the whole network upgrade the client at the same time is risky.

Does Celo use the same tx fee/gas model as Ethereum?

No. We implemented EIP-1559 which sets a minimum gas price based on congestion to limit gas-price volatility.

(>In the proposed scheme in Ethereum the "base fee" is burned and there is another part, a "tip" is paid directly to validators.)

In our design, the base fee goes to the validators and the tip goes to the full node that serviced the light client. This is part of our full node incentives scheme that encourages people to operate full nodes that service light clients.

Awesome. I read Celo enables economic abstraction (i.e. fees paid in different currencies). Will fees still be burned in Celo Gold (as in EIP-1559)? Is there some (automated) swap mechanism to do that?

The Celo client actually maintains multiple mempools, one for each supported transaction fee currency. These currencies can include ERC20-like tokens that have been whitelisted by governance. This means that you can pay for your Celo Dollar transaction with Celo Dollars ๐Ÿ™‚

Could you share with us more details regarding the staking process?

Yes! Users lock up their Celo Gold (Celo's reserve and staking asset) in a smart contract. Doing so allows them to vote both for validator groups and for on-chain governance proposals. If they vote for a validator group that elects at least one validator, they will earn staking rewards based on the performance of the validators in that group and on the total amount of Celo Gold securing the network. Users do not get slashed if their validator/validator groups misbehave (only the locked gold put up by the validators and validator groups get slashed).

Is there a lockup period when someone stakes his Celo Gold and wants to get it back/unstake it?

Yes. We are aiming for a long-ish lockup period for validators and validator groups to create a long objectivity window, while a short lockup period for users voting on validators to avoid the derivative issue.

On that last point, we wanted to call out Chorus One for providing great feedback and helping us refine our design.

Is the goal to achieve wide distribution of the staking token Celo Gold, or do you just primarily care that there are many users for the stable coins? If you want wide Celo Gold distribution, whatโ€™s the plan for how to accomplish that?

We care about both. Success on the latter fulfills the Celo mission, while a good distribution of Celo Gold is good for securing the network.

As far as I understand it Celo Gold is used both as a staking token and as collateral for Celo stablecoins (such as Celo Dollars). Can you talk a bit about the stability mechanism? Can other forms of collateral be used to create Celo stablecoins (a la Multi-Collateral Dai)?

Great question. The stability mechanism is seigniorage-based with an over collateralized multi-collateral crypto reserve. We are targeting having roughly 50% of the reserve be held in Celo Gold and the other 50% be held in other crypto assets. For the latter, in the short term, the community will elect an entity to help diversify that portion of the reserve.

In the long term, we have engaged some of the best cross-chain bridge projects to help us bridge to Bitcoin and Ethereum so we can bring those assets onto the Celo chain and diversify in a fully programatic way.

One really great feature of this design is that you can exchange from Celo Dollars to Celo Gold without a counter-party using a uniswap-like exchanges that is part of the stability protocol. This exchange allows people to arbitrage trade whenever they see the price of Celo Dollars below or above the peg on centralized exchanges (similar to how fiat-backed stable coins keep their peg). Because of this, we anticipate that Celo Dollars will keep the peg much better than Dia.

You can read more about our stability analysis here: https://storage.googleapis.com/celo_whitepapers/Celo_Stability_Analysis.pdf

Maybe a final question before we wrap up (unless you want to answer more questions ;)): Celo is about to launch the second (beta) testnet (is it going to be called โ€œBaklavaโ€?). Can you share details on what is to come, where people can learn more, and the timeline for launch?

Yes! We are looking to launch our Baklava testnet next month. This will be the network that we will use for our incentivize testnet which we will be announcing soon. If you're interested in competing for some rewards, I encourage you to follow our twitter account where we will share the announcement ๐Ÿ™‚

Thanks for coming by! Really impressed with Celo's vision, technology choices and the amazing communication.

Thanks, and thanks for having me here!