Розгортання Move-модулів в Aptos: деплой смарт-контрактів під ключ

Реліз модулів в основній мережі зривається через поспіх і розрізнені доступи. Ми розгортаємо смарт-контракти Aptos під ключ: складання, перевірка, керований випуск і відкат в одному регламенті. Наші інженери передають команді готовий контур релізів, щоб оновлення виходили передбачувано.
Часті запитання

Чому деплой смарт-контрактів Aptos зривається в проді

Розгортання Move-модулів у Aptos зривається не на етапі написання логіки, а на релізі. Локально модуль компілюється й проходить тести, а в мережі транзакція відхиляється — бо конфігурація середовища, ресурсний акаунт і адреса публікації розійшлися з тим, що реально задеплоєно.

За логами вузла причину не витягнути: мережа повертає загальний код відмови, а не місце розходження.

Друге вузьке місце — керування ключами підпису. Коли публікація йде вручну з локального гаманця, закритий ключ живе на машині розробника, а кожна транзакція підписується окремо.

При зміні відповідального ключ нікому передати, ротація перетворюється на простій, а порядок релізів відновлюється за чиєюсь пам'яттю.

Третє — відсутність перевірки байткоду перед публікацією. Модуль іде в основну мережу без прогону на тестовій, без звірки отриманого байткоду з очікуваним і без валідації прав доступу.

Помилка публікації модуля в такому режимі коштує не перезбирання, а незворотної зміни стану акаунта.

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

Що дає керований реліз модулів: збірка, перевірка, відкат

Керований реліз — це конвеєр, де кожна версія збирається із зафіксованого джерела, проходить один і той самий набір перевірок і потрапляє в основну мережу лише після підтвердження на тестовій.

Публікація пакета в Aptos незворотна, тому відкат версії модуля готують заздалегідь: попередня версія залишається робочою і повертається за відпрацьованою процедурою, а не збирається в момент збою.

  • Збірка в чистому ізольованому середовищі: модулі компілюються з джерел без ручних правок — розходження між локальною та релізною версією виключено.
  • Автоматизація збірки за зміною в репозиторії: один і той самий набір команд дає відтворюваний результат, випуск не залежить від того, хто запускає реліз.
  • Перевірки перед публікацією: статичний аналіз, тести логіки та прав доступу — частка успішних публікацій з першого разу зростає.
  • Прогін на тестовій мережі: той самий пакет проходить ключові сценарії, включно з відмовами за доступом і лімітами, поведінка збігається з основною мережею.
  • Перевірка сумісності сховища: зміна структури ресурсів тестується на міграцію, щоб уже створені акаунти продовжили працювати.
  • Підготовлений відкат версії модуля: зафіксована попередня версія та процедура повернення — відновлення займає хвилини замість повторної збірки.

Час випуску версії скорочується в рази: ручні кроки замінено відтворюваними. Клас відмов через людський фактор — правка в зібраному артефакті, пропущене погодження, публікація не тієї версії — зникає, бо конвеєр його не пропускає.

Варіанти розгортання модулів: порівняння підходів та обмежень

В Aptos модуль публікується в акаунт і залишається в стані мережі: скасувати публікацію не можна, можна лише замінити код під час наступного оновлення.

Тому режим розгортання обирають не за зручністю, а за устроєм процесу випуску — хто тримає ключі, скільки контурів потрібно і як часто логіка змінюється після релізу.

Мережа додає свої обмеження: акаунту потрібен баланс під газ, розмір модуля обмежений протоколом, а оновлення доступне лише за політики оновлення, увімкненої при першій публікації. На цю умову пізніше вплинути не можна — вона фіксується в момент деплою. Нижче — три режими розгортання та межі застосовності кожного.

Режим Коли підходить Обмеження
Пряма публікація модуля Один контур, ранні перевірки логіки, короткий цикл правок Ключ залишається в інженера, немає історії релізів і відтворюваності збірки, відкат неможливий — нова версія замінює код у тому самому акаунті
Релізний конвеєр Команда з кількох розробників, регулярні випуски, тест і прод Потребує інфраструктури збірки й підпису, зберігання ключів у захищеному вигляді та прогону перевірок до публікації
Керований контур Продукт у продакшені, потрібні ролі, аудит і розділення середовищ Без регламенту доступу, ротації ключів і окремого контуру перевірок втрачає сенс; супровід складніший

На практиці режими комбінують: чорнові збірки публікують напряму на ізольованому контурі, а в продакшен іде лише версія, що пройшла конвеєр. Вибір фіксують на етапі проєктування — перший деплой визначає, які оновлення та ролі будуть доступні далі.

Порядок робіт: від аудиту модулів до передачі керування

Кожен етап закривається зафіксованим результатом — наступний крок не починаємо, доки попередній не прийнято. Так на будь-якому відрізку проєкту видно, що вже перевірено і де перебуває робота.

Нижче маршрут, яким проходить деплой смарт-контрактів Aptos: від читання джерел до передачі керування вашій команді.

  1. Аудит модулів. Розбираємо джерела: хто володіє ресурсами, які функції публічні, де змінюється стан, чи є права на випуск і спалювання активів.
  2. Карта залежностей. Фіксуємо зв'язки між модулями, спільні структури та порядок публікації — помилка в черговості обвалює розгортання цілком.
  3. Проєктування середовищ. Визначаємо, що розгортається в тестовій мережі, а що в основній, і які параметри змінюються між ними: адреси, ролі, ліміти.
  4. Налаштування середовищ. Готуємо ключі та права, публікуємо модулі, ініціалізуємо стан, перевіряємо адреси та зв'язки на тестовій мережі.
  5. Перевірки. Проганяємо сценарії на граничних значеннях: нестача прав, повторний виклик, перевищення лімітів — до переходу в основну мережу.
  6. Приймання. Показуємо контрольні операції в основній мережі та звіряємо результат із картою залежностей, зафіксованою на другому етапі.
  7. Передача керування. Віддаємо репозиторій, схему середовищ, політику доступу до ключів і регламент оновлення модулів.

Результат на кожному кроці фіксується письмово, тому до приймання у вас залишається повна картина розгортання, а не набір розрізнених транзакцій.

Що передаємо на руки: конфігурації, схеми, політики, регламенти

Проєкт вважається зданим не тоді, коли модулі опубліковано в основній мережі, а коли ваша команда оновлює їх без нас. Тому разом із кодом передаємо артефакти, що описують середовища, права та порядок релізу: за ними новий інженер входить у проєкт за день, а не за тиждень.

  • Схема середовищ модулів — адреси та профілі локального стенда, тестової й основної мережі, порядок просування модуля між ними та правила синхронізації даних.
  • Політики доступу — власник адміністративного ресурсу, розмежування ролей, пороги мультипідпису, місця зберігання ключів і регламент ротації.
  • Регламент релізу — політика оновлення модулів, порядок погодження, вікна публікації, хто підписує і що робити при невдалому оновленні.
  • Документація по модулях — призначення, публічні функції, події, інваріанти та залежності між модулями.
  • Конфігурації — параметри збірки й публікації, зафіксовані профілі, змінні середовища, відтворювана збірка з чистого середовища.
  • Моніторинг і алерти — які події модулів відстежуються, які інваріанти перевіряються і кому надходить сигнал про збій.
  • Передача проєкту — реєстр адрес, роздача доступів, навчання команди та канал для запитань після здачі.

Це робочі документи, а не звіт для полиці: регламент релізу використовують при кожному оновленні, схему середовищ — при введенні нового інженера.

Кейс: переведення релізів модулів на керований контур

До нас прийшла продуктова команда, що випускала Move-модулі в мережі Aptos: кілька сервісів, спільний набір модулів і близько десяти інженерів із доступом до публікації. Релізи йшли з локальних машин, тому версія, зібрана одним розробником, могла відрізнятися від версії сусіда.

Як було

Частка успішних публікацій трималася на рівні двох третин: падіння давали незбіжні профілі, застарілі адреси модулів і правки «по ходу». Повний реліз займав кілька годин — більша частина йшла на звірку та погодження порядку випуску.

Ручних кроків було більше десяти, а відновлення після збою залежало від того, хто з інженерів на зв'язку, і могло зайняти день.

Що змінили і що стало

Зібрали керований контур: тестове й основне середовища розвели так, що вони більше не перетинаються, збірку зробили відтворюваною, а ключі публікації прибрали з локальних машин у захищене сховище з ролями.

Кожен крок випуску став перевірюваною командою — звірка адрес модулів, порядку публікації та сумісності проходить до відправлення, а не після.

Частка успішних публікацій вийшла на 95% і вище, реліз скоротився з кількох годин до півгодини, ручних кроків залишилося два — запуск і підтвердження.

Відновлення після збою вимірюється хвилинами: журнал показує, на якому кроці зупинився випуск, і попередня версія модулів повертається передбачувано. Новий інженер проводить першу публікацію сам, без супроводу.

Чим відрізняється публікація модуля від оновлення пакета в Aptos?

Публікація й оновлення в Aptos — це та сама транзакція пакетної публікації, різниця лише в стані акаунта-видавця. Перший деплой кладе модуль за адресою акаунта й створює там ресурс із політикою оновлення; кожна наступна публікація звіряється з цим станом.

Якщо модуль із таким ім'ям за адресою вже є, публікація падає з помилкою про наявний модуль — пройде лише оновлення з тим самим набором іменованих адрес у маніфесті.

Політику оновлення обирають один раз при першому деплої, далі її можна лише посилювати аж до спалювання права оновлення. Тому структуру акаунта проєктують до публікації, а не після.

Варіант Коли потрібен Обмеження
Публікація модуля Перший деплой, новий продукт, окрема копія під іншу адресу Ім'я модуля за адресою має бути вільним; політика фіксується назавжди
Оновлення пакета Нові функції, виправлення логіки в працюючому контракті Потрібне право оновлення на акаунті; зміни проходять перевірку сумісності версій

Сумісність перевіряється за порядком і типами полів структур, сигнатурами публічних функцій, параметрами типів і дружніми оголошеннями.

Втрачають її найчастіше на зміні іменованої адреси в маніфесті: компілятор бачить новий модуль і випускає другу копію контракту замість оновлення. Другий частий випадок — видалення публічної функції, яку викликають чужі контракти.

Код і дані зберігаються роздільно: оновлення змінює модуль, але ресурси в акаунтах залишаються попередніми. Якщо структура полів змінилася, старий стан читається за попереднім розкладом, тому перенесення даних виносять в окрему функцію і викликають разом з оновленням.

Наші інженери закладають запас сумісності та сценарій відкату заздалегідь — тоді оновлення не перетворюється на перевипуск контракту з втратою адреси й історії.

Технічні сумніви перед стартом: доступи, відкат, тестова мережа

Частину питань інженерні команди ставлять ще до старту — від відповідей залежить розкладка ролей і склад першого релізу.

Як розмежувати доступи до модуля після публікації?

Ролі розводимо відразу: акаунт публікації випускає модулі, адміністративний змінює параметри, операційний виконує рутинні виклики. Ключ адміністратора йде в мультипідпис із порогом, щоб один інженер не випустив версію сам. Керування передаємо замовнику — у нас залишається роль лише для оновлень за процедурою.

Що робити, якщо нова версія модуля виявиться невдалою?

Політику оновлень фіксуємо до першої публікації: сумісні зміни проходять автоматично, несумісні потребують явного підтвердження. Адреса модуля не змінюється, стан залишається на місці — повернення робиться публікацією попереднього артефакту. Тому схеми ресурсів проєктуємо із запасом на зміну.

Де перевіряємо код до основної мережі?

Прогін іде на тестовій мережі з тими самими параметрами політики, що й в основній. Автотести покривають публічні функції, окремо перевіряємо відмови: нестача прав, повторний виклик, вихід за ліміт обчислень. В основну мережу йде артефакт, що збігається з перевіреним за контрольною сумою.

Як враховуємо ліміти мережі при деплої?

У транзакції є стеля за обчисленнями та обсягом корисного навантаження — при перевищенні публікація відкочується. Витрату заміряємо на тестовій мережі, важкі операції розбиваємо на пакети й тримаємо запас за бюджетом, щоб пік не перетворювався на відмову.

Обговоримо задачу: як будується перший етап робіт

Перше, що ми робимо за зверненням, — розбираємо задачу до рівня модулів. Деплой смарт-контрактів Aptos починається не з коду, а з розуміння, які структури та ресурси Move буде заторкнуто, хто володіє акаунтом публікації і чи немає в мережі модулів із тією самою адресою.

Помилка в адресі або в політиці оновлення пакета означає, що випустити нову версію контракту потім уже не вдасться.

Щоб перший етап робіт зайняв дні, а не тижні, від вас потрібен мінімум:

  • посилання на репозиторій і гілку з актуальним кодом;
  • опис бізнес-логіки: що контракт робить при виклику і які стани змінює;
  • відомості про акаунти: хто публікує, чи потрібен мультипідпис;
  • перелік зовнішніх залежностей — інші контракти та джерела даних;
  • обмеження середовища: основна мережа чи тестова, вимоги до перевірок;
  • інженер на вашій стороні, який відповість на питання щодо коду.

Наша частина цього етапу — розбір структури модулів і залежностей, перевірка сумісності з актуальною гілкою мережі, чернетка політики оновлення та план впровадження з порядком публікації.

Оцінка задачі приходить документом: склад робіт за блоками, ризики та способи їх закриття, послідовність кроків і межа першого релізу. Так видно, де ми можемо зламати вже працюючі контракти і як цього уникнути до публікації.

Опишіть задачу у вільній формі — повернемося з оцінкою та планом.

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

Останні роботи

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