How to build a custodial wallet

How to build a backend for a custodial wallet in 30 minutes.

The wallet is a simple application where users can sign in, generate accounts in different blockchains, send and receive payments. Usually, the wallet provider allows users inside the ecosystem to send transactions between users instant and without fees.

The wallet can store any assets. It can be customer ERC-20 tokens, standard blockchain assets, or government-issued currencies.

In this tutorial, you will learn how to build a custodial wallet backend on Tatum. All you will have to do after this tutorial is to create a nice frontend for your application.

A custodial wallet is a wallet where a third party holds the private keys, usually the wallet provider. The provider has full control over blockchain assets, while users only have to permit to send or receive payments.

There are three logical groups of actions that must be done to create a wallet:

  • the application set up - this includes prerequisites like blockchain wallet creation

  • registration of new users into the application - what must be done during the registration phase

  • user's application journey - what kind of operations users do during their stay in the application

Application set up

This phase is a one-time step that must be done before the launch of the wallet. It involves creating the blockchain wallets your application will support or creating system accounts for the wallet provider.

Registration of the new user

After the configuration is done and the application is live, users are registering into the ecosystem. When a new user signs up for the application, ledger accounts must be created for them. Every account should be created with the external ID of the customer. Thanks to that, it will be possible to list all accounts for the specific customer.

The customer's external ID should be a unique identifier of the user in your application, e.g., your ID.

When you create accounts, blockchain addresses should be created as well and connected to the ledger accounts. By doing so, the process of automatic synchronization of the incoming blockchain transactions starts. It is possible to enable webhook notifications on every incoming transaction to the account.

User's journey

When the user signs in to the application, a list of their accounts should be visible. Usually, also last transactions that happened on any of the accounts are presented as well.

The account's balance is available in the accounts list by default and does not have to be queried separately.

The user can see the detail of the account and transactions connected only to this account. Usually, it is good to display blockchain addresses connected to this account to send a blockchain transaction there.

Finally, there should be a possibility to send the transaction from the account to a blockchain address.

Depends on the requirements, it is possible to enable transactions inside the ecosystem to be performed only inside the application. These are ledger transactions, which are feeless and instant.

That's it. There are many more things to enhance and many more features to have, but this could be a reasonable start for you and your wallet.