Multisignature deposit and withdrawal system on Cardano
Task
Design and develop the system for receiving deposits from multiple users and custodial storage of funds on Cardano blockchain.
Zero sprint
The work process was built according to the SCRUM methodology and divided for two-week sprints. At the first stage was conducted a “zero sprint”, during which the following tasks were solved:
- cstodial storage method was chosen using the multi-signature algorithm
- a study of existing solutions for the Cardano blockchain was conducted
- the main entities and user scenarios are defined, the system specification and API description were created on its base
- an assessment of the development of the system according to the compiled specification was made
Work process
The project took 4 sprints to complete.
AXIOMA developed a system for receiving deposits from multiple users and custodial storage of funds. This was achieved by using a 2 out of 3 multi-signature algorithm: each deposit address is generated based on one hot wallet and two cold ones. A hot wallet is generated according to the HD-wallet principle, cold wallets are fixed.
Thanks to this, we have the advantages of using a hot and cold wallet at the same time:
- receive funds to many addresses at once,
- funds can be spent only after the transaction is confirmed by the cold wallet holder.
The application consists of 4 modules:
- The core lib. It can be used as a JS-module, and provides all functionality described in specification.
- The REST-API. It wraps the core lib providing all its methods as API plus adds an authorization layer.
- The UI for REST-API to get pending transactions and send signed transactions to blockchain.
- The accountant UI for signing transactions. It is made as a separate app with minimal dependencies because it works with sensitive data.
Also there was created complete system specification including BPM, Use Case, Activity and ER diagrams. The detailed user manual was created as well.
Changes in requirements
The work on an agile methodology allows you to change previously made decisions on the fly and implement improvements without losing the pace of work.
In the project, it was originally planned that the app would work as the microservice, but in the end it can also be used as the Javascript library. It was also originally planned that it will work from the separate Cardano node, but as the result several implementations were made to interact with the blockchain (a separate, blockfrost.io, cardano-graphql API), which can be selected through the configuration.
Technology stack
- Typescript
- OpenAPI
- Cardano-serialization-lib
- Mongo
- Docker
The result of the work
- Application as a separate JS-library and a set of microservices ready to run with Docker-compose
- Detailed user manual including, among other things, production infrastructure description and requirements as well as security recommendations