https://www.youtube.com/watch?v=4Mm3BCyHtDY&list=PLO5VPQH6OWdWsCgXJT9UuzgbC8SPvTRi5

5ый урок безопасность и web3

Часто смарт-контракты работают с большими деньгами. А значит требования к безопасности в этой области высокие. Поэтому неотъемлемой частью разработки смарт-контракта является тестирование. В этой статье мы узнаем основные термины, которые потребуются в дальнейшем. А также познакомимся с атакой re-entrancy attacks.

Способы выявления проблем в контрактах

Перечислим основные способы с помощью которых выявляют проблемы в контрактах. Но сначала запомним один широко-используемый жаргон — продакшен или продуктив — реальная среда в которой должен работать контракт.

Тесты

— Юнит-тесты или модульное тестирование — тестирования отдельных частей контракта. Мы под этим термином будем в основном понимать тест отдельной функции контракта — Регрессионное тестирование — запуск тех же тестов на уже протестированном ранне коде, после того как код был изменен. Мы будем под этим понимать повторный запуск тестов после изменений. — Интеграционные тесты — тесты на взаимодействие модулей и системы в целом. Мы будем под этим термином будем понимать тестирование на взаимодействие контрактов. — Формальное тестирование — тестирование на смарт-контракта на соответсвие документации

Аудит

Предлагаемая система тестиорвания

  1. Remix — ранние тесты, выявление мелких ошибок. Можно тестировать независимые части контрактов. Проверять компилируется ли контракт вообще. Полезно для раннего unit-тестирования. Зависимые контракты и межконтрактные взаимодействия на данный момент в Remix тестировать нельзя (не работает at address).
  2. Написание критических тестов на truffle и последующее тестирование Очень полезный этап. В серьезных проектах ему уделяется большое внимание. На truffle можно писать как юнит-тесты так и проводить полноценное интеграционное тестирование с реальными параметрами из продакшен среды. Основные полюсы:
  1. Тестирование в тестовой сети Наиболее распространенный способ. Контракты или отдельный контракт загружается в одну из тестовых сетей. Контракту устанавливают тестовые параметры, отличные от продуктива. А затем в ручную, избирательно тестируют основные активности.
  2. Изменения если необходимо
  3. Регрессионное тестирование
  4. Аудит кода
  5. Баг-баунти

re-entrancy attacks