Список безпеки смарт-контрактів
Контрольний список розробки смарт-контрактів
Ось процес високого рівня, який ми рекомендуємо дотримуватися при написанні смарт-контрактів.
Перевірте відомі проблеми безпеки:
- Перевірте свої контракти за допомогою Slither (opens in a new tab). Він має більше 40 вбудованих детекторів для поширених вразливостей. Запускайте його під час кожної реєстрації з новим кодом і переконайтесь, що він отримує чистий звіт (або використовуйте режим сортування, щоб приглушити певні проблеми).
- Перевірте свої контракти за допомогою Crytic (opens in a new tab). Він перевіряє 50 проблем, які не робить Slither. Crytic також може допомогти вашій команді залишатися один на одному, шляхом легкого виявлення проблем безпеки в Pull Requests на GitHub.
Розглянемо особливі можливості договору:
- Ваші контракти оновлені? Перевірте свій код оновлюваності на наявність недоліків за допомогою
slither-check-upgradeability(opens in a new tab) або Crytic (opens in a new tab). Ми задокументували 17 способів, як оновлення можуть піти шкереберть. - Чи передбачають ваші контракти відповідність ERC? Перевірте їх за допомогою
slither-check-erc(opens in a new tab). Цей інструмент миттєво виявляє відхилення від шести поширених видів. - Чи інтегруєте ви з токенами сторонніх виробників? Перегляньте наш контрольний список інтеграції токенів, перш ніж покладатися на зовнішні контракти.
Візуально перевірте важливі функції безпеки вашого коду:
- Перегляньте принтер inheritance-graph (opens in a new tab) від Slither. Уникайте ненавмисного затінення та проблем лінеаризації C3.
- Перегляньте принтер function-summary (opens in a new tab) від Slither. Він повідомляє про функцію видимість та контроль доступу.
- Перегляньте принтер vars-and-auth (opens in a new tab) від Slither. Програма повідомляє про контроль доступу до змінних стану.
Документуйте критичні властивості безпеки та використовуйте автоматичні генератори тестів для їх оцінки:
- Навчіться документувати властивості безпеки для вашого коду. Для початку це важко, але це єдина найважливіша діяльність для досягнення гарного результату. Також це необхідна умова для використання будь-якої з передових технік у цьому підручнику.
- Визначте властивості безпеки в Solidity для використання з Echidna (opens in a new tab) та Manticore (opens in a new tab). Зосередьтеся на вашій машині стану, контролі доступом, арифметичних операціях, зовнішній взаємодії та відповідності стандартам.
- Визначте властивості безпеки за допомогою Python API від Slither. Зосередьтеся на успадкуванні, змінних залежностях, контролі доступу та інших структурних питаннях.
- Запускайте тести властивостей для кожного коміту за допомогою Crytic (opens in a new tab). Crytic може споживати і оцінювати тести на властивість безпеки, щоб кожен з вашої команди міг легко побачити, що вони передають на GitHub. Помилкові тести можуть блокувати коміти.
Врешті, пам’ятайте про проблеми, які автоматизовані інструменти не можуть легко знайти:
- Відсутність приватності: будь-хто може бачити ваші транзакції, поки вони стоять у черзі в пулі
- Фронтальні операції
- Криптографічні операції
- Ризиковані взаємодії із зовнішніми компонентами DeFi
Зверніться по допомогу
Приймальні години Ethereum (opens in a new tab) проводяться щовівторка в другій половині дня. Ці 1-годинні сеанси 1: 1 - це можливість поставити нам будь-які питання щодо безпеки, усунення недоліків за допомогою наших інструментів і отримати відгуки від експертів провашого поточного підходу. Ми допоможемо вам працювати з цим посібником.
Приєднуйтеся до нашого Slack: Empire Hacking (opens in a new tab). Якщо у вас є запитання, ми завжди доступні на каналах #crytic та #ethereum.
Останні оновлення сторінки: 7 лютого 2025 р.