Solidity. Смарт контракты и аудит
2.63K subscribers
247 photos
7 videos
18 files
557 links
Обучение Solidity. Уроки, аудит, разбор кода и популярных сервисов
Download Telegram
Изучаем Foundry

На канале у Ильи вышел новый урок про Foundry. Это что-то вроде Hardhat, но для написания тестов используется Solidity.

Вот этот видео урок.

Я бы, возможно, пропустил его в рамках своего обучения, так как привык к hh и не видел смыла, тогда, изучать его. Если бы не текущие собеседования.

В рамках одного из них предлагали скачать архив с файлами для проверки контрактов на уязвимости, и что вы думаете? Проект там был создан для foundry. И мне пришлось в скором темпе перекидывать и адаптировать его под hh, чтобы начать работу.

Поэтому, чтобы вам в будущем не "прижало", просто покопайтесь в foundry в ближайшее время и поймите, как там настраиваются проекты. А в следующем посте я напишу, какие у меня возникли трудности с ним.

#foundry #forge
👍1
Возможные проблемы с Foundry

Я еще далеко не все изучил про эту среду разработки, но уже столкнулся с парой проблем, о которых хочу рассказать.

Во-первых, это время установки. У меня достаточно слабый ноут и время установки заняло больше часа. Поэтому, если захотите поработать с ним, имейте ввиду, что это может занять у вас продолжительное время.

В видео уроке хорошо объясняются базовые моменты, и упоминается, что перед установкой Foundry на Windows, нужно будет скачать и установить еще две программы.

Вообще, как оказалось, Windows достаточно дырявая система для работы со смарт контрактами, тестами и взломами. Но не об этом сейчас.

Во-вторых, скачивание пакетов (типа npm). Тут это работает немного по другому. Тут вы скачиваете git репозиторий. Причем не по ссылке, а именно в команде указываете название репозитория на GitHub, например

forge install foundry-rs/forge-std

В-третьих, я еще до конца не разобрался, но, когда вам присылают архив с проектом в Foundry, то вас скорее всего потребуется установить пакеты для его работы. Пример такого проекта на скрине.

В моем есть remappings.txt, где прописаны следующие строки:

@openzeppelin/=lib/openzeppelin-contracts/contracts/
@openzeppelin-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/
@chainlink/=lib/chainlink/

Это те контракты, которые используются в примерах и которые нужно установить к себе. Как это сделать напрямую из файла я еще не разобрался.

А с командой, как показано в документации:

forge install foundry-rs/forge-std (это пример команды)

у меня постоянно возникали две ошибки: первая:

fatal: not a git repository (or any of the parent directories): .git

которая исправилась у меня через git init, и вторая:

This command requires clean working and staging areas, including no untracked files. Modify .gitignore and/or add/commit first, or add
the --no-commit option.

которая решается удалением из папки lib пустой одноименной директории и последующей командой:

forge install foundry-rs/forge-std --no-commit

После этого в lib создастся папка с нужными контрактами и настройками.

Я еще разбираюсь с остальными файлами, и если будут возникать ошибки, отпишусь здесь.

Буду рад советам, если кто-то уже работал с Foundry и может поделиться секретами быстрой настройки и установки.

#foundry #forge
👍4
Проверка покрытия тестами

Только для пользователей Linux, как я понял, есть новый инструмент для проверки покрытия тестами какого-либо контракта с использованием команды forge coverage.

Самое интересное в нем, что вам в файле контракта будут подсвечиваться строки, для которых уже были написаны тесты и те, которые пропустили. Пример на скрине.

В этой статье можно почитать про настройку и проведение тестов.

#linux #coverage #forge #foundry
4
Foundry для продвинутых

Постепенно у меня в закладках скапливается много статей, которые я хочу разобрать, но, чувствую, что это может занять много времени. Поэтому, чтобы оставаться в фокусе обучения аудиторству, я буду делать порой сборные посты с подборками.

И сегодня в очереди первый пост со статьями для тех, кто хочет повысить свои навыки работы с Foundry.

1. Подготовка и проведение тестов инвариантов с WETH. Крутая статья от одного из разработчиков самого Foundry о том, что такое инварианты, как проводятся тесты, и на что обращать внимание. Прекрасный пошаговый гайд.

2. Создание моста с Foundry. Интересная статья на Медиуме с примерами, как разработчику можно создать свой простой мост между сетями блокчейна.

3. Тулкит для работы с Chainlink в Foundry. Рассказывается, как правильно создать свой узел, сделать первоначальную настройку и подготовить среду для работы.

Повторюсь, данные статьи вряд ли будут понятны для начинающих разработчиков и тех, кто никогда не работал с Foundry. Для других же они могут значительно повысить навыки работы.

#foundry #forge #scope
👍42🔥1
Обновления в Foundry

Разработчики выпустили новую версию библиотеки forge-std, добавив туда несколько новых команд и улучшений.

Во-первых, теперь можно выделять различными цветами вывод текста в консоли командой: 

console2.log(StdStyle.red("my red string"))

что сделает более удобным поиск нужно информации. Там есть и другие цвета: red, green, yellow, blue, magenta, cyan, bold, italic, underline, dim, и inverse.

Во-вторых, команда deal, с помощью которой мы могли "закинуть" себе токенов на счет в тестах, теперь работает и для стандартов ERC721 и ERC1155, например:

dealERC1155(bar, address(this), 0, 1000e18, true)

В-третьих, появилась команда assertEqCall, которая помогает верифицировать, что два вызова приводят к одному результату или возвращают схожие данные.

В-четвертых, появилась команда vm.expectCallMinGas, которая ожидает вызов на адрес с указанными параметрами, включая количество газа. Не уверен в точном переводе, но так она звучит в оригинале: vm.expectCall variants to assert on the minimum amount of gas passed to a call.

В-пятых, вместо expected/actual в выводе ошибок, теперь будет left/right. Вообще не понял смысл этого переименования, но, вероятно, разработчики вкладывали какой-то смысл в это.

В этой ветке в Твиттере можете посмотреть скрины с примерами.

#foundry #forge
👍32🔥1
Foundry Safer Log

Небольшая библиотека от Philogy для повышения качества работы с Foundry, а точнее с логированием событий.

По словам Philogy, стандартные настройки Foundry модифицируют память, что порой мешает дебагу low-level assembly в последствии. С данным решением об этом можно не беспокоиться.

P.S. Скоро придется делать пост "Работаем с Foundry: с 0 до pro"!

#foundry #forge
🔥4