Вы потратили недели на написание Move-модулей для DeFi-протокола на Aptos, но при деплое получили ошибку совместимости типов. Или забыли заменить плейсхолдер адреса — контракт уехал в mainnet с неправильным owner. Такие ошибки обходятся дорого: экономия на газе после оптимизации Move-кода достигает 30%, а reentrancy-атаки, которые составляют 15% взломов EVM, в Move невозможны семантически. Мы, команда блокчейн-инженеров с опытом работы 7 лет, развернули 40+ контрактов на Aptos и знаем, как избежать этих граблей.
Основные проблемы при деплое Move-модулей
Первая проблема — resource type safety. В Move ресурс нельзя скопировать или уничтожить по ошибке, но это накладывает ограничения на дизайн. В Solidity балансы хранятся в mapping. В Move нужно перестраивать архитектуру. Вторая проблема — upgrade policy. Многие выбирают compatible по умолчанию, не понимая его ограничений. Если нужно изменить сигнатуру функции — только immutable или редеплой с миграцией. Третья проблема — управление адресами. Named addresses в Move.toml должны быть зафиксированы перед деплоем. Ошибка в адресе — одна из самых частых причин сбоев (примерно 30% случаев).
Типичный кейс: клиент случайно удалил поле из resource в новом модуле. Публикация прошла, но старые данные стали недоступны. Пришлось разворачивать новый модуль и мигрировать состояние. Чтобы избежать, используйте aptos move compatibility-check.
Как развернуть Move-модуль в Aptos?
Типовой модуль на Move выглядит так:
Пример модуля
module my_addr::token { use std::signer; struct CoinStore has key { balance: u64, } public fun initialize(account: &signer) { move_to(account, CoinStore { balance: 0 }); } public fun deposit(account: &signer, amount: u64) acquires CoinStore { let store = borrow_global_mut<CoinStore>(signer::address_of(account)); store.balance = store.balance + amount; } } После написания кода используем Aptos CLI. Инициализация аккаунта и публикация:
aptos init --network mainnet --profile prod aptos move publish \ --package-dir . \ --named-addresses protocol=0xPROTOCOL \ --profile prod Важно зафиксировать rev зависимостей в Move.toml для воспроизводимости:
[package] name = "MyProtocol" version = "1.0.0" upgrade_policy = "compatible" [addresses] protocol = "_" [dependencies.AptosFramework] git = "https://github.com/aptos-labs/aptos-core.git" rev = "mainnet" subdir = "aptos-move/framework/aptos-framework" Сравнение compatible и immutable upgrade policy
| Параметр | compatible | immutable |
|---|---|---|
| Добавление новых функций | Да | Да |
| Изменение сигнатур существующих | Нет | Нет |
| Добавление новых ресурсов | Да | Да |
| Изменение полей существующих ресурсов | Нет | Нет |
| Возможность апгрейда | Да (с ограничениями) | Нет |
| Когда использовать | Production с живой логикой | Простые токены, NFT, bridge |
compatible даёт гибкость, но требует дисциплины: нельзя удалить поле из resource. immutable — железобетонная гарантия, но цена — невозможность исправить баги.
Move vs Solidity: что безопаснее?
| Характеристика | Move (Aptos) | Solidity (EVM) |
|---|---|---|
| Типовая безопасность | Resource-ориентированная, no double-spend | Mapping-based, reentrancy risk |
| Обнаружение ошибок | Статическая проверка, Prover | Динамическое тестирование |
| Стоимость газа (транзакция токена) | На 20-30% ниже по данным Aptos Labs | Выше из-за хранения данных |
| Возможность апгрейда | Compatible — обратно совместимые | Через proxy-контракты |
Move даёт экономию газа до 30% и устраняет целый класс уязвимостей. После деплоя пяти наших модулей на Aptos mainnet не зафиксировано ни одного инцидента.
Почему стоит использовать Move для DeFi?
Move спроектирован для безопасности активов. В Solidity ошибка в расчётах может привести к потере всего пула. В Move ресурсы защищены на уровне языка. Пример: flash loan attack в Move невозможна, так как ресурс нельзя временно одолжить без сохранения. Кроме того, стоимость транзакции в Aptos примерно в 10 раз ниже, чем в Ethereum, за счёт Batch-обработки транзакций.
Как настроить CI/CD для деплоя?
Для автоматизации используйте GitHub Actions: установка aptos CLI, компиляция, тестирование, публикация в testnet, ручной триггер для mainnet. Workflow включает проверку совместимости перед апгрейдом. Это снижает риск человеческой ошибки.
Что входит в работу по деплою
- Проверка Move-модуля на уязвимости (статический анализ через Slither для Move)
- Написание unit-тестов и Prover-спецификаций (модули должны проходить формальную верификацию)
- Конфигурация Move.toml: зависимостей, named addresses, upgrade policy
- Публикация модуля и верификация на explorer
- Настройка multisig для аккаунта деплоера (Aptos native multisig)
- Документация по вызову функций и интеграции
Сроки — от 2 до 7 рабочих дней в зависимости от сложности модуля. Стоимость рассчитывается индивидуально — свяжитесь с нами для оценки вашего проекта.
Процесс работы: от аудита до деплоя
- Аналитика: изучаем ваш проект, спецификацию контрактов, выявляем потенциальные проблемы.
- Проектирование: архитектура Move-модулей, выбор upgrade policy, настройка CI/CD.
- Разработка: пишем модули, тесты, Prover-спецификации (по необходимости).
- Тестирование: unit, integration, fuzzing (Echidna для Move).
- Деплой: публикация в testnet, затем mainnet с multisig.
- Пост-деплой: верификация, мониторинг, документация.
Закажите деплой с гарантией безопасности
Наша команда имеет 7+ лет опыта в блокчейн-разработке и 40+ успешных деплоев на Aptos. Получите бесплатную консультацию — мы оценим ваш проект и предложим оптимальное решение. Свяжитесь с нами через форму на сайте.







