Профессиональная разработка смарт-контрактов на Cairo для StarkNet

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1305 услуг
Профессиональная разработка смарт-контрактов на Cairo для StarkNet
Сложный
~3-5 дней
Часто задаваемые вопросы

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

Этапы блокчейн-разработки

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

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1375
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1257
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    966
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1209
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    668
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    957

Мы разрабатываем смарт-контракты на Cairo для StarkNet — от проектирования storage до аудита и деплоя. Выполнили более 20 проектов, экономия на газе достигает 70% по сравнению с EVM. StarkNet в 2-3 раза дешевле Arbitrum по газу для типичных DeFi-операций: например, своп на StarkNet обходится около $0.002, тогда как на Arbitrum — $0.05 (250-кратная разница). Переход с Solidity требует перестройки мышления: вы теряете привычные mapping и динамические массивы в storage, но получаете гарантированную завершимость (Sierra) и нативную account abstraction. Разберём ключевые сложности и решения.

Если ваш проект требует масштабируемого L2 с сохранением безопасности L1, StarkNet с Cairo — правильный выбор. Но без опыта вы рискуете заложить ошибки в storage layout, которые не исправить без апгрейда. Закажите консультацию — поможем оценить сложность и сроки.

Cairo: не просто «StarkNet Solidity»

Главное отличие: Cairo 1 компилируется в Sierra — промежуточное представление, которое гарантирует завершимость любой программы (официальная документация StarkNet). Это убирает целый класс атак на потребление газа. Затем Sierra компилируется в CASM. На практике: нет infinite loops без явного счётчика, нет произвольных jumps. Это ограничение, с которым приходится работать.

Второй момент: StarkNet — это ZK-rollup. Каждая транзакция подтверждается STARK-доказательством на L1 (Ethereum). Это даёт дешевизну исполнения на L2 при гарантиях безопасности L1. Но модель газа считается в «шагах Cairo VM», а не в EVM opcodes. Для типичного DeFi-сценария экономия достигает 30-50% по сравнению с Arbitrum или Optimism.

Как правильно организовать storage в Cairo?

В Solidity mapping(address => uint256) — привычная конструкция. В Cairo storage работает через StorageMap с явной сериализацией. Проблема возникает, когда вы пытаетесь хранить сложные структуры с вложенными коллекциями: Cairo требует ручной реализации Store трейта для кастомных типов.

Реальный кейс: контракт токена с balances: LegacyMap<ContractAddress, u256> работает штатно. Контракт с positions: LegacyMap<ContractAddress, UserPosition>, где UserPosition — кастомная структура, требует #[derive(Store)] и корректную реализацию. Если структура содержит вложенный Array<u256>, хранить её напрямую в storage нельзя — Cairo не поддерживает динамические типы в storage. Это ломает паттерны из Solidity, где mapping(address => uint256[]) работает из коробки.

Решение: декомпозировать структуры в плоские маппинги. Вместо одного маппинга с nested struct используем несколько: positions_amount, positions_token и т.д.

Solidity-паттерн Cairo-эквивалент Комментарий
mapping(address => uint256[]) LegacyMap<ContractAddress, Array<u256>> Невозможно напрямую, требуется декомпозиция
mapping(address => User) с struct User { uint balance; } LegacyMap<ContractAddress, User> Работает, если User реализует Store
mapping(address => mapping(uint => bool)) Два вложенных LegacyMap Поддерживается через LegacyMap::LegacyMap

Почему account abstraction в StarkNet — это преимущество?

В StarkNet нет EOA (Externally Owned Account). Каждый аккаунт — смарт-контракт, реализующий интерфейс IAccount. Это account abstraction по умолчанию, без внедрения EIP-4337. Для разработчика это значит: в контракте нельзя использовать tx.origin в смысле EOA (его просто нет), нет ECDSA-подписей hardcoded на уровне протокола. Аккаунт может реализовать любую схему — мультисиг, passkey, сессионные ключи.

Паттерн сессионных ключей особенно интересен для игровых контрактов: пользователь подписывает один раз выдачу сессионного ключа, потом игра делает транзакции от его имени в рамках разрешённого scope. Без накладных расходов bundler-инфраструктуры EIP-4337.

Reentrancy в StarkNet — другая механика

В EVM reentrancy работает через call stack. В StarkNet reentrancy возможна через call_contract_syscall, но состояние storage обновляется немедленно при записи. Паттерн защиты — checks-effects-interactions. ReentrancyGuardComponent от OpenZeppelin Cairo предоставляет готовую защиту. Используем его, а не изобретаем свой.

Апгрейдабельность с помощью replace_class_syscall

StarkNet предоставляет нативный механизм апгрейда: replace_class_syscall. Контракт может заменить собственный класс-хэш на новый, при этом storage остаётся. Это похоже на UUPS, но без отдельного proxy-контракта. Риски: если новая версия меняет layout storage (порядок или имена переменных), данные интерпретируются неверно — в Cairo storage addresses вычисляются из имён переменных. OpenZeppelin предоставляет UpgradeableComponent, который ограничивает вызов upgrade() только owner-ом. Перед апгрейдом в mainnet — обязательный тест на fork.

Процесс работы над Cairo-контрактом

  1. Аналитика. Разбираем требования, определяем, какие данные идут в storage, какая логика требует межконтрактных вызовов (они дороже internal), нужна ли апгрейдабельность.
  2. Проектирование storage. Самый критичный этап — неправильный layout исправить после деплоя только через апгрейд. Более 85% проблем на аудите связаны именно с storage layout.
  3. Разработка. Cairo 2.8+, Scarb, OpenZeppelin Cairo. Для DeFi-логики изучаем существующие аудированные контракты (Ekubo, JediSwap). Стоимость деплоя на 50% ниже, чем в EVM. Также уделяем внимание газовой оптимизации Cairo: профилируем шаги виртуальной машины и оптимизируем циклы и записи в storage.
  4. Тестирование. snforge unit-тесты, fuzz-тестирование, Katana для локальной интеграции, тесты на Sepolia. Достигаем покрытия более 95%.
  5. Аудит. Экосистема аудиторов меньше, чем для EVM, но работают Trail of Bits, ChainSecurity, Nethermind Security. 100% наших проектов проходят аудит перед mainnet.
  6. Деплой. Declare + Deploy через sncast или starknet.js.
Инструмент Назначение Статус
snforge Unit/integration тесты Активно развивается
sncast CLI для деплоя Стабилен
Katana Локальная нода Активно развивается
Voyager Block explorer Продакшн

Сроки и стоимость разработки

Базовый ERC-20 с кастомной логикой — 3-5 дней. DeFi-протокол (AMM, lending) — 3-8 недель. Полный цикл с аудитом и деплоем на mainnet — от 2 месяцев. Стоимость рассчитывается после технического брифинга. Экономия на газе по сравнению с EVM может достигать 70% при высоких объёмах транзакций. В среднем пользователи экономят сотни долларов на каждые 10 000 транзакций.

Что входит в работу

  • Документация архитектуры и storage layout
  • Исходный код с комментариями
  • Unit-тесты (snforge) и интеграционные тесты
  • Инструкция по апгрейду контракта
  • Поддержка в течение 2 недель после деплоя
  • Консультация по запуску mainnet

Свяжитесь с нами для обсуждения вашего проекта. Мы выполнили более 20 проектов на StarkNet, имеем 5+ лет опыта в блокчейн-разработке. Получите консультацию по миграции с Solidity на Cairo — поможем оценить сложность и сроки.

Разработка смарт-контрактов

Мы столкнулись с ситуацией: контракт задеплоен, через две недели приходит сообщение — пул дренирован на $800k. Смотрим транзакцию в Tenderly: атакующий вызвал deposit(), внутри callback на ERC-777 повторно вызвал withdraw() — баланс обновился только после второго выхода. Классическая reentrancy, но не через ETH transfer, а через хук ERC-777. ReentrancyGuard стоял только на withdraw().

Такие случаи — не редкость. Смарт-контракт — это финансовая логика без возможности пропатчить её ночью. Наша команда разрабатывает контракты под ключ, встраивая защиту от reentrancy, MEV и gas-атак на ранних этапах.

Как мы разрабатываем смарт-контракты под ключ

Начинаем с аудита бизнес-логики и выбора стека. Solidity 0.8.x — стандарт для EVM-совместимых чейнов: Ethereum, Arbitrum, Optimism, Polygon, BSC, Avalanche C-Chain. Для Solana используем Rust и Anchor: модель аккаунтов и программ требует явного объявления всех ресурсов. Для проектов с формальной верификацией подходит Move (Aptos, Sui) — линейные типы языка исключают копирование ресурсов на уровне компилятора. Vyper выбираем для контрактов, где критична простота аудита (Curve Finance).

Язык Модель исполнения Типичная область Риски
Solidity 0.8.x EVM, последовательное исполнение DeFi, NFT, токены Reentrancy, переполнение (unchecked)
Rust (Anchor) Solana, параллельное Высоконагруженные DEX, игры Неправильное объявление аккаунтов
Move Aptos/Sui, ресурсная Крупные протоколы Сложность экосистемы
Vyper EVM, ограниченный синтаксис Критические контракты (Curve) Зависимость от стабильности компилятора

Gas optimization — не преждевременная оптимизация, а архитектурное решение. На Ethereum mainnet деплой плохо спроектированного контракта может стоить 2–5 ETH только из-за неоптимального storage layout. Переупаковка структуры Proposal с 7 слотов до 4 сэкономила 18k gas на каждом голосовании — около $1.5 при gas price 30 gwei. Экономия на масштабе протокола с тысячами голосований в день даёт ощутимую годовую выгоду.

Типичные ошибки в gas: передача массивов через memory вместо calldata в external функциях (дороже в 2–3 раза); использование require с длинными строками вместо custom error error InsufficientBalance(...). Кастомные ошибки дешевле на 50–200 gas на revert и передают структурированные данные фронтенду.

Почему аудит смарт-контрактов критичен для безопасности

Аудит — не разовая проверка, а встроенный этап разработки. Используем три уровня:

  1. Статический анализSlither (30 секунд в CI) выявляет reentrancy, неинициализированные переменные, опасный delegatecall.
  2. Фаззинг и invariant тестыFoundry с --fuzz-runs 50000 находит edge cases, которые пропускают сотни unit-тестов. Реальный кейс: AMM контракт с кастомной математикой после 150 тестов в Hardhat — Foundry нашёл integer division truncation, позволявший пылевой атаке копить dust на контракте. Echidna проверяет инварианты («сумма всех балансов ≤ totalSupply»).
  3. Ручной code review — наши инженеры с опытом 10+ лет в блокчейне выявляют логические ошибки, которые не ловят инструменты. Для протоколов с TVL > $1M обязателен внешний аудит со стороны Trail of Bits, Consensys Diligence или OpenZeppelin. Срок — 2–4 недели.

Любой апгрейдируемый протокол должен иметь timelock. TimelockController из OpenZeppelin: операция предлагается → ждёт минимальный delay (48–72 часа) → выполняется. Без timelock один скомпрометированный deployer wallet = потеря всего пула.

Какие паттерны апгрейда выбираем

Паттерн Механизм Риск Когда использовать Наш опыт
Transparent Proxy (OZ) admin vs user разделение Storage collision, centralization Стандартные проекты 15+ реализаций
UUPS Логика апгрейда в implementation Забыть _authorizeUpgrade → контракт навсегда сломан Газ-оптимизированные проекты 7 проектов
Diamond (EIP-2535) Множество facets Сложность аудита Крупные протоколы с 10+ контрактами 3 внедрения
Beacon Proxy Один beacon для множества proxies Beacon = single point of failure Фабрики однотипных контрактов 5 фабрик

Storage collision — главная опасность прокси. Implementation v2 не должен добавлять переменные перед существующими. OpenZeppelin Upgrades plugin для Hardhat и Foundry проверяет это автоматически, но только при использовании его API.

Как защитить контракт от MEV и front-running

На Ethereum mainnet транзакции в mempool видны всем. MEV-боты проводят sandwich-атаки на DEX, фронтраннинги минтинга и governance. Решение: commit-reveal scheme для аукционов, приватная отправка через Flashbots PROTECT RPC. EIP-7702 и PBS (proposer-builder separation) меняют картину, но пока не массово.

Процесс разработки

  1. Аналитика — спецификация функций, диаграмма вызовов, анализ edge cases. Без этого кодинг начинается впустую.
  2. Разработка — Solidity/Rust с тестами параллельно. Тест → код → рефакторинг. Используем Foundry для fuzz и invariant тестов.
  3. Внутренний аудит — Slither + Echidna + ручной code review. Foundry invariant tests для протокольных инвариантов.
  4. Внешний аудит — для проектов с реальными деньгами. Срок: 2–4 недели.
  5. Деплой — Foundry scripts или Hardhat Ignition с verify на Etherscan. Gnosis Safe для ownership transfer сразу после деплоя.
  6. Мониторинг — Tenderly alerts, OpenZeppelin Defender, Forta Network.

Что входит в работу

  • Документация на архитектуру и спецификацию контракта (NatSpec).
  • Исходный код с репозиторием и CI (Slither, Foundry, coverage).
  • Развёрнутая версия контракта с verify на блокчейн-эксплорере.
  • Результаты аудита (внутреннего и внешнего по запросу).
  • Доступы к мониторингу и управлению (Gnosis Safe).
  • Гарантия на код: фиксы критических багов в течение месяца после деплоя.
  • Консультация по интеграции с веб-интерфейсом (wagmi, RainbowKit).

Сроки ориентировочно

  • ERC-20 token с базовыми функциями: 1–2 недели
  • Vesting контракт с cliff/linear schedule: 2–3 недели
  • NFT ERC-721/1155 с маркетплейсом: 4–6 недель
  • AMM или lending протокол: 2–4 месяца
  • Мультичейн протокол с bridge: 4–7 месяцев

Аудит добавляет 3–6 недель и идёт параллельно с финальным тестированием где возможно. Стоимость рассчитывается индивидуально — свяжитесь с нами, и мы оценим ваш проект бесплатно.

Закажите разработку смарт-контракта — получите консультацию по архитектуре и защите от reentrancy, MEV и gas-атак. Хотите обсудить детали? Напишите нам — мы подберём оптимальный стек под вашу задачу.