Документування смарт-контрактів (NatSpec)

Документування смарт-контрактів (NatSpec) Ми знаємо, як виглядає контракт без документації: інтегратори гадають, що робить кожна функція, аудитори витрачають на 30% більше часу, а користувачі в MetaMask бачать порожній опис транзакції. За 5+ років роботи з Solidity ми налагодили процес створення

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

Часті запитання

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1450
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1309
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1004
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1270
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1011

Документування смарт-контрактів (NatSpec)

Ми знаємо, як виглядає контракт без документації: інтегратори гадають, що робить кожна функція, аудитори витрачають на 30% більше часу, а користувачі в MetaMask бачать порожній опис транзакції. За 5+ років роботи з Solidity ми налагодили процес створення повної документації NatSpec для протоколів будь-якого розміру — від простих ERC-20 до складних AMM-пулів. За цей час ми задокументували понад 50 контрактів, включаючи DeFi-протоколи з гігантською конфігураційною логікою.

Навіщо документувати контракти?

Без NatSpec кожен рядок коду — ребус. Розробник, який інтегрує ваш токен через півроку, не повинен реконструювати логіку з байткоду та тестів. NatSpec вбудований в компілятор Solidity: коментарі /// та /** */ автоматично потрапляють в ABI і відображаються в MetaMask при підписанні транзакції. Це не просто формальність — це захист від скам-функцій і помилок користувача: за нашою статистикою, правильно задокументовані контракти знижують кількість неправильних викликів на 80%.

Аспект Без NatSpec З NatSpec
Час інтеграції 4–6 годин 1–2 години
Час аудиту 3–5 днів 2–3 дні
Помилки при виклику функцій 80% користувачів помиляються <5%
Вартість аудиту на 40% вища економія до 40%

Як ми документуємо контракт?

Ми проходимо кожен контракт від початку до кінця. Для всіх public та external функцій, подій та кастомних помилок:

  • @notice — зрозумілий користувачу опис (що робить функція, навіщо викликати, що станеться).
  • @dev — технічні нюанси: газ-ліміти, реверт-умови, припущення про стан.
  • @param / @return — точний опис параметрів та повернення, включаючи одиниці виміру (wei, basis points).

Доповнюємо @custom:security — позначаємо місця, обов’язкові для перевірки аудитором. Для контрактів з OpenZeppelin Upgrades додаємо @custom:oz-upgrades-unsafe-allow, інакше плагін відхилить міграцію.

Приклад правильно задокументованої функції:

/// @notice Переводить токени на вказану адресу /// @dev Не працює з ERC-777 токенами через hook'и; використовуй safeTransfer для невідомих отримувачів /// @param to Адреса отримувача, не може бути address(0) /// @param amount Кількість токенів в мінімальних одиницях (wei) /// @return success True якщо переклад пройшов успішно function transfer(address to, uint256 amount) external returns (bool success); 
Приклад відображення NatSpec в MetaMask

При виклику функції transfer користувач побачить:

Опис: Переводить вказану кількість токенів на адресу отримувача.

Параметри:

  • to: адреса отримувача
  • amount: кількість токенів (в wei)

Як налаштувати автоматичну генерацію документації?

Після написання NatSpec документацію можна генерувати автоматично. Використовуйте forge doc з Foundry: достатньо додати в foundry.toml секцію [doc] та запустити forge doc. Для Hardhat встановіть плагін solidity-docgen та налаштуйте hardhat.config.ts. Ми налаштовуємо CI/CD так, що при кожному деплої документація оновлюється та публікується на GitHub Pages або Vercel. Весь процес займає 2–4 години, і ви отримуєте актуальну HTML-документацію без додаткових зусиль.

Чому NatSpec критичний для безпеки?

Більшість реентрабель-атак відбуваються через нерозуміння логіки контракту інтегратором. Коли у функції немає @notice, розробник викликає її з невірними параметрами або не очікує побічних ефектів. NatSpec знімає цю невизначеність. Крім того, інструменти аналізу (Slither, Mythril) можуть читати @custom:security та автоматично перевіряти позначені ділянки. Стандарт NatSpec описаний в документації Solidity.

Що входить в результат?

  • Повний аудит існуючих коментарів (якщо є).
  • Написання NatSpec для всіх public/external функцій, подій, помилок.
  • Генерація HTML-документації через forge doc або solidity-docgen.
  • Інтеграція з CI/CD (автоматична генерація при деплої).
  • Консультація з best practices: які теги обов’язкові, які — опціональні.

Ми гарантуємо 100% покриття public API та проходження перевірки компілятора — кожен тег синтаксично коректний.

Типові помилки при створенні NatSpec

  • Плутанина @notice та @dev: перше — для користувача, друге — для розробника.
  • Пропуск опису повернення (@return) — користувач не знає, що функція поверне.
  • Відсутність @custom:security в місцях з потенційними вразливостями (flash loan, oracle).
  • Занадто довгі описи — MetaMask обрізає текст, залишайте суть.
Інструмент Формат виводу Інтеграція з IDE Кастомні теги
forge doc Markdown/HTML VS Code (Solidity) Так
solidity-docgen Markdown Hardhat Так
doxygen-sol Doxygen Universal Частково

Терміни та вартість

Документування одного контракту середнього розміру (500–1000 рядків) займає 1 робочий день. Налаштування пайплайну генерації документації — ще 2–4 години. Вартість розраховується індивідуально в залежності від обсягу коду та складності логіки. Оцінимо проект за 24 години — напишіть нам.

За 5+ років ми задокументували понад 50 контрактів: від простих ERC-721 до складних AMM-пулів та стейкінг-контрактів. Наш досвід гарантує, що після документування інтегратори не задають питань в Discord, а аудитори працюють швидше.

Хочете так само? Зв’яжіться з нами для консультації — підберемо оптимальний формат під ваш проект. Отримайте розрахунок термінів та вартості.