The recent cryptocurrency boom has reflected on lots of digital-aligned projects, forcing financial-oriented businesses to enter the age of crypto payments. We took a challenge and build a client-side wallet for storing Ethereum tokens on the user’s end. From scratch.

The concept

Basically, cryptocurrency wallets could be divided into two groups: hosted and non-hosted. While hosted wallets can not be marked as “trustless” (user’s keys are stored on service provider’s servers, even in a “hashed” way), non-hosted or client-side wallets never apply for a “trusted” server that way, creating and signing a transaction on the user’s end. This way, proper fund management can only be applicable for users who want to have entire control over their funds. Therefore, businesses who would like to satisfy a user’s interest should be oriented on client-side key storage, as it follows the idea of decentralization, which is highly valued by the crypto community.

The realization

In order to speed up the realization, we have offered several variants for addressing to public libraries, in order to define the basic framework and workflow. The server, backend, and frontend parts were built from scratch by Unknwn team.

Server and Backend

We’ve run three full Ethereum nodes with RPC on them, and have spread them worldwide, in order to reduce any connection lags and increase communication speed. The user interface backend is based on Node.js.

Frontend

The frontend part is written on Vue.js. The logic of client-side operations was made via JavaScript, so all the iterations related to decryption of wallet seeds, creating and signing the transactions could be made through a user’s browser, without sending any essential info outside of it.

Libraries We Used

As for the cryptographic part, we have adopted the ethereumjs-wallet public library that allows a private key to be converted into an address, and ethereumjs-tx library to sign raw transactions with private keys.