Система мультиподписного депозита и вывода средств на Cardano
Задача
Разработать систему для получения депозитов от многих пользователей и кастодиального хранения средств в блокчейне Cardano.
Нулевой спринт
Процесс работы был построен по SCRUM методологии и разбит на двухнедельные спринты. Первым этапом мы провели “нулевой спринт”, в ходе которого были решены следующие задачи:
- выбран метод кастодиального хранения с использованием алгоритма мультиподписей
- проведено исследование существующих решений для блокчейна Cardano
- определены основные сущности и пользовательские сценарии, на их основе сделана спецификация системы и описание API
- сделана оценка разработки системы по составленной спецификации
Процесс работы
Выполнение проекта заняло 4 спринта.
AXIOMA разработала систему получения депозитов от ногих пользователей и кастодиального хранения средств. Это было достигнуто путем использования алгоритма мультиподписи "2 из 3": каждый адрес депозита генерируется основываясь на одном горячем и двух холодных кошельках. Горячий кошелек генерируется в соотвтствии с принципом HD-кошелька, холодные кошельки фиксированные.
Благодаря этому, у нас есть одновременно преимущества использования горячих и холодных кошельков:
- получение средств на несколько адресов одновременно,
- средства могут быть использованы только после того, как транзакция подтверждена держателем холодного кошелька.
Приложение состоит из 4 модулей:
- сновная библиотека. Она может быть использована как JS-модуль и предоставляет всю функциональность, описанную в спецификации.
- REST-API. Является оберткой для основной библиотеки предлагая все ее методы как API плюс добавляет уровень авторизации.
- UI для REST-API для получения ожидающих транзакций и отправки подписанных транзакций в блокчейн.
- UI бухгалтера для подписания транзакций. Он сделан как отдельное приложение с минимальными зависимостями, потому что оно работает с конфиденциальными данными.
Также была создана полная спецификация системы, включая BPM, Use Case, Activity и ER диаграмы. Кроме того, было создано руководство пользователя.
Изменения в ходе работы
Работа по гибкой методологии позволяет изменять принятые ранее решения “на лету”, и внедрять улучшения без потери темпа работы.
В данном проекте изначально планировалось, что приложение будет работать как микросервис, но в итоге оно может быть использовано также и в качестве Javascript-библиотеки. Также изначально планировалась работа только с отдельной Cardano-ноды, но в итоге для взаимодействия с блокчейном было сделано несколько реализаций (отдельная нода, blockfrost.io, cardano-graphql API), которые можно выбирать через конфигурацию.
Стек технологий
- Typescript
- OpenAPI
- Cardano-serialization-lib
- Mongo
- Docker
Результат работы
- Приложение в виде отдельной JS библиотеки и набор микросервисов, готовых к работе с Docker-compose
- Подробное руководство пользователя, включающее, среди прочего, описание и требование к производственной инфраструктуре, а также рекомендации по безопасности