Перейти до основного контенту

Список безпеки смарт-контрактів

Смарт-контракти
захист
мова програмування
Середнячок
Trailofbits
7 вересня 2020 р.
2 читається за хвилину

Контрольний список розробки смарт-контрактів

Ось процес високого рівня, який ми рекомендуємо дотримуватися при написанні смарт-контрактів.

Перевірте відомі проблеми безпеки:

  • Перевірте свої контракти за допомогою Slitheropens in a new tab. Він має більше 40 вбудованих детекторів для поширених вразливостей. Запускайте його під час кожної реєстрації з новим кодом і переконайтесь, що він отримує чистий звіт (або використовуйте режим сортування, щоб приглушити певні проблеми).
  • Перевірте свої контракти за допомогою Cryticopens in a new tab. Він перевіряє 50 проблем, які не робить Slither. Crytic також може допомогти вашій команді залишатися один на одному, шляхом легкого виявлення проблем безпеки в Pull Requests на GitHub.

Розглянемо особливі можливості договору:

  • Ваші контракти оновлені? Перевірте свій код оновлюваності на наявність недоліків за допомогою slither-check-upgradeabilityopens in a new tab або Cryticopens in a new tab. Ми задокументували 17 способів, як оновлення можуть піти шкереберть.
  • Чи передбачають ваші контракти відповідність ERC? Перевірте їх за допомогою slither-check-ercopens in a new tab. Цей інструмент миттєво виявляє відхилення від шести поширених видів.
  • Чи інтегруєте ви з токенами сторонніх виробників? Перегляньте наш контрольний список інтеграції токенів, перш ніж покладатися на зовнішні контракти.

Візуально перевірте важливі функції безпеки вашого коду:

  • Перегляньте принтер inheritance-graphopens in a new tab від Slither. Уникайте ненавмисного затінення та проблем лінеаризації C3.
  • Перегляньте принтер function-summaryopens in a new tab від Slither. Він повідомляє про функцію видимість та контроль доступу.
  • Перегляньте принтер vars-and-authopens in a new tab від Slither. Програма повідомляє про контроль доступу до змінних стану.

Документуйте критичні властивості безпеки та використовуйте автоматичні генератори тестів для їх оцінки:

  • Навчіться документувати властивості безпеки для вашого коду. Для початку це важко, але це єдина найважливіша діяльність для досягнення гарного результату. Також це необхідна умова для використання будь-якої з передових технік у цьому підручнику.
  • Визначте властивості безпеки в Solidity для використання з Echidnaopens in a new tab та Manticoreopens in a new tab. Зосередьтеся на вашій машині стану, контролі доступом, арифметичних операціях, зовнішній взаємодії та відповідності стандартам.
  • Визначте властивості безпеки за допомогою Python API від Slither. Зосередьтеся на успадкуванні, змінних залежностях, контролі доступу та інших структурних питаннях.
  • Запускайте тести властивостей для кожного коміту за допомогою Cryticopens in a new tab. Crytic може споживати і оцінювати тести на властивість безпеки, щоб кожен з вашої команди міг легко побачити, що вони передають на GitHub. Помилкові тести можуть блокувати коміти.

Врешті, пам’ятайте про проблеми, які автоматизовані інструменти не можуть легко знайти:

  • Відсутність приватності: будь-хто може бачити ваші транзакції, поки вони стоять у черзі в пулі
  • Фронтальні операції
  • Криптографічні операції
  • Ризиковані взаємодії із зовнішніми компонентами DeFi

Зверніться по допомогу

Приймальні години Ethereumopens in a new tab проводяться щовівторка в другій половині дня. Ці 1-годинні сеанси 1: 1 - це можливість поставити нам будь-які питання щодо безпеки, усунення недоліків за допомогою наших інструментів і отримати відгуки від експертів провашого поточного підходу. Ми допоможемо вам працювати з цим посібником.

Приєднуйтеся до нашого Slack: Empire Hackingopens in a new tab. Якщо у вас є запитання, ми завжди доступні на каналах #crytic та #ethereum.

Останні оновлення сторінки: 14 лютого 2026 р.

Чи була ця інструкція корисною?