Deadline.by
Deadline.by

Опишите задачу — посчитаем смету и сроки за день

реальный проект

Блокчейн-платформа: контракты, аудит и кабинет

Проект показываем обезличенно: без названия, отрасли и ссылок

Заказчику нужен был не просто выпущенный токен, а работающая платформа: контракты с собственной экономикой, личный кабинет с реферальной программой, сервис распределения выплат и внешний аудит, который можно показать держателям. Мы прошли весь путь — от первой версии контрактов до четвёртой, с переносом накопленного состояния между ними.

поэтапноWeb3
Кейс — Блокчейн-платформа: контракты, аудит и кабинет
Solidity · FoundryСкрипты миграции состоянияNext.js · ethersNode · Prisma · PostgreSQLВнешний аудит · отчёт RU и EN

Задача

  • Экономика проекта не сводилась к стандартному токену: нужны были комиссии с раздельным назначением, отложенная выдача долей по расписанию, многоуровневая реферальная сеть и правила, ограничивающие операции. Всё это — собственный код, который нельзя исправить после публикации, и который держатели вправе потребовать показать проверенным независимой стороной.

Что сделали

  • Контракты с собственной экономикой: комиссии с раздельным назначением, хранилище сборов, правила операций
  • Отложенная выдача долей по расписанию — с проверкой границ и невозможностью забрать раньше срока
  • Реестр реферальной сети на стороне контракта: связи фиксируются в сети, а не в базе на сервере
  • Разделение прав управления: критичные действия вынесены из-под одного ключа
  • Подготовка к внешнему аудиту и сопровождение проверки, включая повторный проход после исправлений
  • Личный кабинет: подключение кошелька, баланс, реферальная структура, история операций
  • Бэкенд и отдельный сервис распределения выплат по расписанию

Результат

  • Отчёт внешнего аудита, оформленный на двух языках и пригодный для публикации держателям
  • Четыре версии контрактов с перенесённым состоянием: реферальные связи не потерялись при переходе
  • Кабинет, в котором держатель видит свою структуру и историю без обращения в поддержку
  • Выплаты идут по расписанию сервисом, а не запускаются человеком вручную

Почему версий получилось четыре

Опубликованный контракт не правится — любое изменение логики означает новый контракт и перенос всего, что успело накопиться. За время проекта экономика менялась трижды: уточнялись назначения комиссий, менялись правила операций, дорабатывалась реферальная механика. Каждый раз это был не патч, а новая версия с миграцией.

Самой дорогой частью миграции оказались не токены, а реферальная сеть. Балансы переносятся арифметикой, а сеть связей — это граф, который нужно перенести целиком и в правильном порядке: пригласивший должен появиться в новом контракте раньше приглашённого. Мы написали скрипты, которые выгружают граф из старого контракта, сортируют его и заливают порциями с проверкой каждой порции.

Что дал аудит и чего он не дал

К проверке мы шли подготовленными: стандартные библиотеки вместо собственных реализаций там, где это возможно, тесты на граничные значения и отдельный документ на человеческом языке — кто владелец, что он может, чего не может и как передаются права. Этот документ экономит аудитору больше всего времени, а оно и есть предмет оплаты.

Важная часть находок касалась не ошибок в коде, а централизации: мест, где один адрес может слишком много. Такие замечания закрываются не правкой логики, а организационно — разделением прав и задержкой перед исполнением критичных изменений. Отдельно закладывался повторный проход: правка серьёзной находки меняет логику, а новая логика никем ещё не читана.

Что осталось на бэкенде, а что ушло в сеть

Граница проводилась по одному правилу: в сеть уходит то, что должно быть проверяемым и неизменяемым, на сервер — то, что должно быть быстрым и изменяемым. Реферальные связи и правила начисления живут в контракте, потому что держатель вправе их проверить сам. Витрина кабинета, история операций и уведомления живут на сервере, потому что читать их из сети на каждый экран дорого и медленно.

Сервис распределения выплат вынесен отдельно от основного бэкенда сознательно: у него другой ритм работы и другая цена ошибки. Он запускается по расписанию, работает с ключом, у которого ограниченные права, и ведёт журнал каждой отправки — чтобы повторный запуск после сбоя не отправил вторую выплату.

Заполнить бриф