---
title: "Контрольный список безопасности смарт-контрактов"
description: "Рекомендуемый рабочий процесс для написания безопасных смарт-контрактов"
author: Trailofbits
tags:
  - смарт-контракты
  - безопасность
  - solidity
skill: intermediate
breadcrumb: "Контрольный список безопасности"
lang: ru
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). Этот инструмент мгновенно выявляет отклонения от шести распространенных спецификаций.
- Интегрируете ли вы сторонние токены? Изучите наш [контрольный список интеграции токенов](/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. Непройденные тесты могут блокировать коммиты.

Наконец, помните о проблемах, которые автоматизированные инструменты не могут легко обнаружить:

- Недостаток приватности: все остальные могут видеть ваши транзакции, пока они находятся в очереди в пуле
- Фронтраннинг транзакций
- Криптографические операции
- Рискованные взаимодействия с внешними компонентами децентрализованных финансов (DeFi)

## Обратитесь за помощью {#ask-for-help}

[Приемные часы Эфириума](https://calendly.com/dan-trailofbits/office-hours) проходят каждый вторник во второй половине дня. Эти часовые сессии один на один — возможность задать нам любые вопросы о безопасности, устранить неполадки с помощью наших инструментов и получить отзывы от экспертов о вашем текущем подходе. Мы поможем вам разобраться в этом руководстве.

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