Введение в разработку смарт-контрактов с использованием Foundry

Foundry — это набор инструментов для разработки смарт-контрактов для Ethereum, написанный на ржавчине.

Foundry упрощает разработку и развертывание смарт-контрактов. Он оптимизирует процесс, управляя зависимостями, запуская тесты и облегчая развертывание.

В этой статье мы рассмотрим следующее:

  • Что такое Foundry и почему вы должны его использовать?
  • Различные инструменты, предоставляемые Foundry для разработки смарт-контрактов.
  • Как начать работу с Foundry: создавать, развертывать и тестировать смарт-контракты в Solidity

Давайте погрузимся прямо в!

О литейном производстве

Foundry — это набор инструментов для разработки смарт-контрактов для Ethereum, написанный на ржавчине.

Foundry управляет вашими зависимостями, компилирует ваш проект, запускает тесты, развертывает и позволяет вам взаимодействовать с цепочкой из командной строки и с помощью сценариев Solidity.

Foundry создана инвестиционной фирмой Paradigm, ориентированной на криптовалюту.

Зачем использовать Foundry?

  • Вы можете написать тесты для своего смарт-контракта в Solidity (при использовании других сред разработки смарт-контрактов, таких как Hardhat или Truffle, вы должны тестировать Solidity с помощью JavaScript или TypeScript). Почему стоит писать тесты в Solidity, вы можете прочитать здесь.
  • Foundry имеет мощную встроенную возможность фаззинга. По сути, фаззинг — это метод, используемый для поиска уязвимостей или ошибок в программном обеспечении путем предоставления случайных, неожиданных входных данных программе. Фаззинг позволяет исполнителю теста Solidity случайным образом выбирать аргументы для вас, просто передавая аргументы вашей тестовой функции Solidity.

Foundry также предоставляет вам различные инструменты для разработки смарт-контрактов:

  • Forge: тестирует, создает и развертывает ваши смарт-контракты.
  • Cast: CLI-инструмент Foundry для выполнения вызовов Ethereum RPC. Вы можете совершать вызовы смарт-контрактов, отправлять транзакции или получать данные цепочки любого типа.
  • Anvil: локальный узел тестовой сети, поставляемый с Foundry. Вы можете использовать его для тестирования своих контрактов из внешних интерфейсов или для взаимодействия через RPC.
  • Chisel: расширенный REPL Solidity, поставляемый с Foundry. Его можно использовать для быстрого тестирования поведения фрагментов Solidity в локальной или разветвленной сети.

Вы можете узнать больше о наборе инструментов Foundry из Foundry Book и GitHub repo.

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

Подробнее о сравнении инструментов разработки смарт-контрактов Foundry и Hardhat можно прочитать здесь.

Создание, тестирование и развертывание смарт-контрактов с помощью Foundry

Установка

В Linux и macOS:

  1. Откройте терминал и выполните следующую команду:
curl -L https://foundry.paradigm.xyz | bash

Это установит Foundryup, а затем просто следуйте инструкциям на экране, что сделает команду `foundryup` доступной в вашем CLI.

2. Теперь запустите команду foundryup в терминале, чтобы установить набор инструментов Foundry:

foundryup

В Windows:

Если вы работаете в Windows, вам нужно будет установить и использовать Git BASH или WSL в качестве терминала, поскольку Foundryup в настоящее время не поддерживает Powershell или Cmd.

Инициализировать проект

Чтобы начать новый проект с Foundry, используйте forge init:

forge init foundry_project

Это создаст новую папку проекта с именем foundry_project. В папке будет следующее:

- src: каталог по умолчанию для ваших смарт-контрактов

- tests: каталог по умолчанию для тестов

- foundry.toml: файл конфигурации проекта Foundry

- lib: содержит зависимости

- скрипт : файлы сценариев Solidity

Внутри папки src вы найдете образец смарт-контракта с именем Counter.sol.

Для компиляции смарт-контракта используйте forge build:

forge build

Если ваш контракт успешно скомпилирован, вы увидите следующий вывод в своем терминале:

Это скомпилирует смарт-контракты в папке src, а также создаст новую папку с именем out, которая будет содержать байт-код скомпилированного контракта.

Тестирование контракта

Foundry создает каталог с именем tests, который является папкой по умолчанию для хранения всех тестов для смарт-контрактов. Имя тестовых файлов имеет расширение .t.sol`

Если вы перейдете в тестовую папку, вы встретите тестовый файл со специальным именем Counter.t.sol.

Чтобы запустить этот файл для тестирования смарт-контракта Couter.sol, используйте forge test:

forge test

Если все тесты пройдены, вы увидите следующий вывод в своем терминале:

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

С другой стороны, если некоторые тесты не пройдут, это будет вывод.

Вы можете воспроизвести это, внеся некоторые изменения в смарт-контракт Counter.sol` (я изменил функцию increment, чтобы она увеличивала число на 2 вместо 1).

function increment() public {
    number += 2;
}

Развертывание смарт-контракта

Чтобы развернуть смарт-контракт в сети, используйте команду forge create:

forge create --rpc-url <your_rpc_endpoint> --private-key <wallet_private_key> src/Counter.sol:Counter

Вы можете получить RPC для сети от Alchemy, следуя этому руководству

Если смарт-контракт успешно развернут, вы увидите следующий вывод в своем терминале:

Написание тестов для смарт-контракта

Теперь давайте добавим некоторые из наших собственных функций и тестов в существующий смарт-контракт Counter.sol.

В приведенном выше смарт-контракте мы добавили переменную myNumber со значением 42 и функцию decrement(), которая уменьшает значение myNumber на 1.

Чтобы протестировать эти функции, нам нужно добавить некоторые функции в тестовый файл Counter.t.sol.

В приведенный выше тестовый файл мы добавили тестовые функции testMyNumber() и testDecrement(). Функция testMyNumber() проверяет присвоенное значение myNumber, а функция testDecrement() проверяет работу функции уменьшения. Обе эти функции используют assertEq для приравнивания значения, присвоенного myNumber .

Теперь давайте запустим эти новые тесты с помощью команды forge test:

forge test

Если все тесты пройдены, вы получите следующий вывод в своем терминале:

Использование библиотек

Библиотеки, которые вы устанавливаете, будут находиться в папке lib вашего проекта по умолчанию, установлен ds-test, который позволяет вам запускать тесты, создавать утверждения или журналы. Если вы хотите установить другие библиотеки (например, openzeppelin), вы можете запустить:

forge install openzeppelin/openzeppelin-contracts

Это добавит репозиторий openzeppelin в ваш проект в папку lib/openzeppelin-contracts. Теперь вы можете импортировать и использовать смарт-контракты openzeppelin в своем проекте.

Следующие шаги

Таким образом, мы изучили самые основные приложения инструментария литейного производства. Далее мы узнаем, как разрабатывать, тестировать и развертывать более сложные контракты, такие как токены ERC20, ERC721, DEX и многие другие, используя Foundry.

Надеюсь, вам понравилась статья! Если у вас есть какие-либо вопросы или комментарии, не стесняйтесь оставлять их ниже или обращаться ко мне по