Any company holding your crypto-assets will tell you that theft is their biggest concern. Lose your customer’s money and you lose your customers — not to mention your company’s reputation. At Cent, we’re keenly aware of counter-party risks and have sought to minimize them as much as possible.

To date all funds have entered Cent through our Escrow contract. Users send money to the contract, our internal system detects the funds have been received, and the transaction (a bounty, tip, etc) is reflected in the UI. Only members of the Cent team can transfer funds out of this contract. When these these amounts are ready to be settled, we initiate a transaction dispersing the funds to our users’ externally-managed Ethereum addresses.

This system has worked reasonably well thus far, with a few caveats. From a user’s perspective, one of the more terrible feelings is having a transaction take forever to process. That sinking feeling of “where did my money go?” and the need to reach out to support has been an anxiety-inducing event shared by multiple Centians. Often times the culprit isn’t even a congested network — it’s that the default gas prices are too low.

This unpredictability also limits the types of experiences our users can have. Need to make a time-sensitive bounty? Be extra careful with the gas price or your transaction could be stuck for days. As we reflected on the mechanisms and experience we wanted to create, one thing became clear: users needed readily-available balances they could instantly spend from.

Which brings us back to the risk of theft. How do we safely maintain user funds deposited into Cent? The trivial solution is to allow deposits via the same Escrow contract. For bountying, this worked OK — at any given moment there was never more than a couple ETH flowing through the system. But with deposits, all it takes is one large creditor to explode our risk profile. We concluded that our Escrow contract was not suitable for deposits.

We needed an on-chain restriction where the only user who could spend a set of funds was the user who deposited them. Furthermore, we needed “spending” to be instantaneous — aka off-chain. The Cent Wallet is our solution to this set of constraints. Specifically, the Cent Wallet lets a user:

Deposit funds on-chain into their wallet

Spend their balance via signed messages

Link other addresses to spend their balances via signed messages

Withdraw their balance to an external address via signed messages

The only on-chain action a user performs is depositing. For everything else, the user simply passes us signed, single-use authorization messages. The Cent admins submit these messages on-chain, performing actions on behalf of the user such as debiting their wallet. By outsourcing on-chain settlement to us, users no longer need to worry about confirmation times and other nuisances — we’ve got you covered.

As the Ethereum ecosystem has matured, it also has become apparent that users needed a way to unify their balances across multiple devices. In most cases, users maintain different addresses in each wallet (MetaMask, Coinbase Wallet, etc). To reconcile this, users can link multiple addresses within their Cent Wallet. This enables them to sign and spend from a shared balance across any device so long as that address is linked to their Cent Wallet.

Many of the concepts introduced in the Cent Wallet are inspired by state channels. Our wallet is a simplified instantiation of the concept — Cent operates a custodial hub that routes payments between users. Because of this, users can start earning ETH on the platform without even having a Web3 wallet. Only once they’ve decided to do something with their newly-earned ETH do they need to set one up. We believe this progression makes the most sense for new people entering the cryptosphere — those who haven’t yet had exposure to wallets or the Web3 stack.