---
title: "Контрольний список безпеки смарт-контрактів"
description: "Рекомендований робочий процес для написання безпечних смарт-контрактів"
author: "Trailofbits"
tags: ["смарт-контракти", "безпека", "Solidity"]
skill: intermediate
breadcrumb: "Контрольний список безпеки"
lang: uk
published: 2020-09-07
source: Building secure contracts
sourceUrl: https://github.com/crytic/building-secure-contracts/blob/master/development-guidelines/workflow.md
---

## Контрольний список розробки смарт-контрактів {#smart-contract-development-checklist}

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

Перевірте на наявність відомих проблем безпеки:

- Перевірте свої контракти за допомогою [Слізер](https://github.com/crytic/slither). Він має понад 40 вбудованих детекторів поширених вразливостей. Запускайте його під час кожного додавання нового коду та переконайтеся, що звіт не містить помилок (або використовуйте режим сортування, щоб приховати певні проблеми).
- Перевірте свої контракти за допомогою [Crytic](https://crytic.io/). Він перевіряє на наявність 50 проблем, які не виявляє Слізер. Crytic також може допомогти вашій команді бути в курсі справ, легко виявляючи проблеми безпеки в Pull Requests на GitHub.

Враховуйте особливості вашого контракту:

- Чи підтримують ваші контракти можливість оновлення? Перевірте код оновлення на наявність недоліків за допомогою [`slither-check-upgradeability`](https://github.com/crytic/slither/wiki/Upgradeability-Checks) або [Crytic](https://blog.trailofbits.com/2020/06/12/upgradeable-contracts-made-safer-with-crytic/). Ми задокументували 17 способів, як оновлення можуть піти не за планом.
- Чи заявлено, що ваші контракти відповідають стандартам ERC? Перевірте їх за допомогою [`slither-check-erc`](https://github.com/crytic/slither/wiki/ERC-Conformance). Цей інструмент миттєво виявляє відхилення від 6 поширених специфікацій.
- Чи інтегруєте ви сторонні токени? Перегляньте наш [контрольний список інтеграції токенів](/developers/tutorials/token-integration-checklist/), перш ніж покладатися на зовнішні контракти.

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

- Перегляньте принтер [inheritance-graph](https://github.com/trailofbits/slither/wiki/Printer-documentation#inheritance-graph) інструменту Слізер. Уникайте ненавмисного перекриття та проблем з лінеаризацією C3.
- Перегляньте принтер [function-summary](https://github.com/trailofbits/slither/wiki/Printer-documentation#function-summary) інструменту Слізер. Він звітує про видимість функцій та контроль доступу.
- Перегляньте принтер [vars-and-auth](https://github.com/trailofbits/slither/wiki/Printer-documentation#variables-written-and-authorization) інструменту Слізер. Він звітує про контроль доступу до змінних стану.

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

- Навчіться [документувати властивості безпеки для вашого коду](/developers/tutorials/guide-to-smart-contract-security-tools/). Спочатку це складно, але це найважливіша діяльність для досягнення хорошого результату. Це також є передумовою для використання будь-яких передових методів у цьому посібнику.
- Визначте властивості безпеки в Solidity для використання з [Ехідна](https://github.com/crytic/echidna) та [Мантікора](https://manticore.readthedocs.io/en/latest/verifier.html). Зосередьтеся на вашій машині станів, контролі доступу, арифметичних операціях, зовнішніх взаємодіях та відповідності стандартам.
- Визначте властивості безпеки за допомогою [Python API інструменту Слізер](/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/). Зосередьтеся на успадкуванні, залежностях змінних, контролі доступу та інших структурних проблемах.
- Запускайте тести властивостей під час кожного коміту за допомогою [Crytic](https://crytic.io). Crytic може приймати та оцінювати тести властивостей безпеки, щоб кожен у вашій команді міг легко побачити, що вони проходять на GitHub. Тести, які не пройшли, можуть блокувати коміти.

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

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

## Зверніться по допомогу {#ask-for-help}

[Робочі години Етеріуму](https://calendly.com/dan-trailofbits/office-hours) проходять щовівторка у другій половині дня. Ці 1-годинні сесії у форматі 1-на-1 — це можливість поставити нам будь-які запитання щодо безпеки, вирішити проблеми за допомогою наших інструментів та отримати відгук від експертів щодо вашого поточного підходу. Ми допоможемо вам опрацювати цей посібник.

Приєднуйтесь до нашого Slack: [Empire Hacking](https://join.slack.com/t/empirehacking/shared_invite/zt-h97bbrj8-1jwuiU33nnzg67JcvIciUw). Ми завжди доступні в каналах #crytic та #ethereum, якщо у вас виникнуть запитання.