Developing a non-custodial wallet: what’s the difference?
OWNR Wallet is a non-custodial wallet, which means we do not have access to your keys. What does it mean from the viewpoint of development though? We’ve asked our CTO, Sergey Burmisov, to shed some light on it. We’ll discuss why the majority of cryptowallets are built custodial and why a non-custodial wallet would be heavier in stores. But first here’s a brief overview of why the keys matter.
Why are the keys so important?
Your public key is presented by your address in the blockchain network. Anyone can send you crypto using this address. However, knowing the address is not enough to manage the funds on it. In order to send the funds to another address, you’ll need to sign the transaction with the private key. This makes the keys, and the private key in particular, the main object of any cryptocurrency system, from the standpoint of development.
The need to match each public key with its private key and store all these pieces of information is now eliminated with the help of the seed phrase (or mnemonic phrase). If you have access to the seed phrase, you can manage the funds.
From home servers to lightweight wallets
The dawn of crypto saw enthusiasts running blockchain nodes on their machines to interact with the blockchain network. That was pretty cumbersome and required hundreds of gigabytes for a single coin (and hardly helped the adoption of crypto). In fact, the user running a node has to download the whole blockchain network to their machine. The solution came in the form of lightweight wallets. The latter don’t take much storage capacity to store all the blocks and are more user-friendly.
The lightweight dilemma
The light wallets imply that all the blockchain network data is stored on some third party servers — the servers of the company that provides the wallet software. Thus the responsibility for your operations in the blockchain is shared by the client software and the server, with the heaviest part (storage) going to the server.
There are different ways to share the responsibility. The easiest one is to devise the wallet application like a bank application. Let’s say you have $10K stored in a bank. This literally means that you lend $10K to the bank, and it can manage your $10K freely till your withdrawal request. There’s no $10K physically available in the bank, which could cause a withdrawal problem should some force majeure occur and trigger mass withdrawals. Although this system lacks security and assurance, that’s a normal way centralized finance works. It simply can’t work otherwise. But the cryptocurrency system can.
Let’s return to the bank applications and cryptowallets. In a bank app, all the operations are executed on the server, with your funds actually managed by the bank. You just log in and verify your identity for the server to recognize you.
The bank acts as a custody here. So do the companies that manage your cryptocurrency for you. In custodial wallets, crypto is stored on the company’s addresses, with the seed phrases owned by the company. Thus a custodial wallet application is a kind of shell for the simplest commands. The key point of it is to identify you while all the operations will take place on the company’s servers.
While there are no alternatives with fiat money and banking system, cryptocurrency can be managed another way. The company does not necessarily have to access your private keys. In fact, the initial idea behind cryptocurrency is privacy. However, most lightweight wallets are custodial because building the wallet app and server interaction this way is much simpler.
If you take a non-custodial wallet app, it will be more complicated than a custodial one. The client software (the wallet app) will have to deal with cryptography, derivation, generating keys, signing transactions and so on — these operations are executed on the server in case of custodial wallets. A non-custodial wallet app would normally weight more, and quite expectedly so.
What about the server load then? Surprisingly, the server of a non-custodial wallet does more work than the server of a custodial one. For the server to function correctly, it must have a full picture of what is happening in the client software, with the private keys being a corner stone. Refusal to access the private keys means more cases to process for the server since a substantial part of processes inside the client is obscured to it.