Разработка приложений на Stacks (Bitcoin L2) — Clarity-контракты и sBTC

Логика на Биткоин-сети ломается там, где расчёты и ручные сверки идут вразнобой. Мы разрабатываем приложения на Stacks под ключ: проектируем контракты, настраиваем интеграцию с Биткоином и передаём команде понятные регламенты. Сверки перестают занимать дни, а класс ошибок из-за ручного ввода уходит.
Часто задаваемые вопросы

Разработка Stacks: где ломается связка с Биткоином

Stacks выбирают, когда приложению нужна расчётная база Биткоина, но логика должна жить в контрактах. Состояние и вычисления остаются на втором слое, а расчёты и порядок наследуются от базовой сети. Именно этот стык — связка слоёв расчётов — и становится местом, где разработка Stacks ломается чаще всего.

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

Второе — порядок выхода данных в базовый слой. Данные второго слоя попадают туда пакетом, и очерёдность внутри пакета не совпадает с той, в которой операции шли у пользователя. Ввод и вывод sBTC добавляют свои окна ожидания, поэтому «успешно» и «расчётно» — два разных состояния, которые нужно различать в коде.

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

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

Что меняется после внедрения: сроки, отказы, проверяемость

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

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

Класс отказов, который закрывается первым, — рассинхрон между учётом и фактическим состоянием на цепочке. Двойные записи, потерянные события, «повисшие» переводы sBTC уходят, потому что источником истины становится проверяемое состояние, а не база-посредник.

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

Разработка на Stacks: сравнение вариантов интеграции

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

Вариант Когда подходит Ограничения
Контракты Clarity на базовом слое Расчёты должны наследовать безопасность Bitcoin, логика публична и проверяема Комиссия и задержка на каждую операцию, ограниченный объём состояния, частые вызовы дороги
Отдельный слой расчётов с мостом Много операций, нужен быстрый отклик и низкая стоимость транзакции Мост между слоями — дополнительная точка доверия и период вывода средств
Гибридная схема Критичные правила остаются на базовом слое, нагруженные выносятся наружу Разнесённая логика: дороже аудит, нужна синхронизация состояния между частями
Закрытый контур Внутренние расчёты, конфиденциальные данные, требования к изоляции Безопасность публичной сети не наследуется, сохранность целиком на операторе

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

Этапы: аудит логики, схема контрактов, проверка, передача

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

  1. Аудит логики и текущего контура — читаем существующие контракты и обращения к хранилищу, размечаем опубликованные функции, права адресов и связанные балансы. На выходе — карта рисков: что нельзя переписать и что придётся переносить.
  2. Схема контрактов — раскладываем логику на минимальное число модулей: ядро с состоянием, модуль прав, вспомогательные вызовы. Фиксируем публичные функции, события, структуру хранилища и порядок публикации — от него зависит, до какой точки возможен откат.
  3. Реализация и проверка граничных случаев — пишем контракты и покрываем каждую ветку отказа отдельной проверкой: повторный вызов, недостаток прав, нулевой ввод, попытка вывести больше, чем есть на балансе.
  4. Тестовый контур — прогон в изолированной сети на реальных сценариях: пополнение и вывод sBTC, обмен между контрактами. Отдельно смотрим поведение при перегрузке сети Bitcoin, когда подтверждения идут медленно.
  5. Развёртывание — публикация этапами: сначала контракты, затем права, затем перенос состояния, каждый шаг с проверкой. Ключи и доступы выдаём по минимально необходимому набору.
  6. Приёмка и передача — прогоняем контрольные сценарии вместе с вашей командой, сверяем результат с ожидаемым, отдаём документацию: схему контрактов, перечень функций, порядок обновления и аварийного поведения, плюс обучение команды.

Что входит в пакет передачи: код, схемы, регламенты

Передача проекта — это не архив с кодом и не список адресов развёрнутых контрактов. Мы отдаём комплект, по которому ваша команда может провести независимую проверку, внести изменение и восстановить работу после сбоя без нашего участия. Ниже — что именно входит в пакет.

  • Исходники контрактов. Тексты контрактов на Clarity с комментариями, тесты, скрипты развёртывания и воспроизводимой сборки. Репозиторий поднимается на чистой машине одной командой — без «у меня локально работает».
  • Схемы взаимодействия слоёв. Как контракты связаны с кошельком и внешними сервисами, где проходят границы доверия, какие точки отказа к какому сбою приводят и как это диагностируется.
  • Политики доступа и ключей. Роли, пороги подписей, порядок ротации ключей и выдачи прав. Права администратора передаются вам — мы не остаёмся единственными, кто может изменить контракт.
  • Документация. Описание интерфейсов, форматов вызовов, событий и структуры хранения. Отдельный раздел — почему приняты те или иные решения и что рассматривали как альтернативу.
  • Регламент обновления. Пошаговый выкат новой версии: подготовка, миграция состояния, окно и условия откатa на предыдущую версию без потери данных.
  • Регламент разбора инцидентов. Что считается инцидентом, кто реагирует, как приостанавливается работа контракта, как фиксируется причина и что меняется после разбора.

Приёмка идёт по-инженерному: ваша команда разворачивает проект по нашей документации и проводит пробное изменение в тестовой сети. Всё, что не воспроизводится или требует наших пояснений, считаем дефектом передачи и закрываем до подписания.

Кейс: расчёты на Биткоин-сети без простоя и ручных сверок

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

Что изменили

Логику расчётов и лимитов перенесли в контракты на Stacks — второй слой Биткоин-сети с собственным исполнением и финальностью, привязанной к Биткоину. Состояние и правила стали единым источником истины: оператор перестал сводить балансы вручную и подтверждает только исключения. Выпуск обновления сократился с трёх недель до двух дней — проверки контракта отрабатывают до выката, а не после.

Что стало

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

Что делать, если логика уже развёрнута на другой сети?

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

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

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

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

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

Частые технические сомнения перед стартом работ

Перед стартом заказчик и его инженеры задают одни и те же вопросы. Они касаются не самой технологии, а рисков: нагрузки на базовый слой, приватности данных, гарантий корректности и того, что будет после передачи кода. Ниже — короткие ответы.

Не станет ли приложение дороже в работе при росте числа операций?

Действия пользователей не создают отдельную транзакцию в базовом слое: логика выполняется в слое Stacks, а в Bitcoin уходит агрегированная запись. Нагрузка растёт от числа таких записей, а не от числа вызовов контракта, поэтому пиковый трафик не даёт линейного роста потребления базового слоя.

Как быть, если часть данных нельзя раскрывать?

В контракте хранится идентификатор или хеш записи, а не само содержимое. Данные лежат во внешнем хранилище с разграничением доступа, при этом проверяемость сохраняется: по хешу видно, что запись не подменялась.

Как вы докажете, что контракт корректен?

Clarity исполняется детерминированно и без циклов, поэтому логика поддаётся статическому разбору. Ставим проверки свойств на случайных наборах входов, прогоняем сценарии отказа на локальной копии сети и отдаём код на независимый аудит до публикации.

Что будет после передачи проекта?

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

У нас своя команда. Как делим работу?

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

Обсудим задачу: с чего начать и что прислать

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

  • Описание процесса — как логика работает сейчас: кто инициирует операцию, где фиксируется результат, какие проверки обязательны перед записью в сеть.
  • Схема контура — из каких сервисов состоит система, где хранятся ключи подписи, какие внешние системы вызываются и в какую сторону идут данные.
  • Границы первой итерации — какие сценарии уходят в контракты на Clarity, а какие осознанно остаются за периметром.
  • Ограничения по срокам — есть ли внешние даты, от которых зависит порядок этапов, и что важнее: ранний рабочий прототип или сразу промышленный контур.
  • Роли в команде заказчика — кто владеет продуктом, кто принимает результат, кто отвечает за инфраструктуру и доступы.
  • Доступы и окружения — репозиторий, тестовый контур, тестовые активы для проверки переводов и откатов.
  • Текущие наработки — если контракты или серверная часть уже есть, пришлите их: разбор готового кода меняет и план, и порядок этапов.

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

Направления блокчейн-разработки

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1369
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142