TGViewer
Из Solidity в AI и дальше Из Solidity в AI и дальше @solidityset · 2.49K subscribers
Post #951 763
Foundry с 0. Часть 31

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

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

Вы можете посмотреть первые полчаса, чтобы наглядно понять, как реализовывать этот паттерн. А вкратце опишу этот процесс тут.

Итак, у нас есть какой-то контракт и он использует в своем решении функции из уже загруженного контракта стороннего протокола на разных сетях, например ChainlinkPriceFeed.

Как мы помним из предыдущих постов, что тесты на разных сетях проводятся с помощью команды:

forge test --fork-url $RPC_LINK

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

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

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

https://github.com/Cyfrin/foundry-fund-me-f23/blob/main/script/HelperConfig.s.sol

1. У нас есть некий контракт, при развертывании которого необходимо указывать адрес ChainlinkPriceFeed контракта той сети, где планируется деплой.

https://github.com/Cyfrin/foundry-fund-me-f23/blob/main/src/FundMe.sol

2. Также у нас есть контракт для тестов. И тут стоит обратить внимание на функцию setUp():
https://github.com/Cyfrin/foundry-fund-me-f23/blob/main/test/unit/FundMeTest.t.sol

FundMe public fundMe;
HelperConfig public helperConfig;

function setUp() external {
DeployFundMe deployer = new DeployFundMe();
(fundMe, helperConfig) = deployer.run();
vm.deal(USER, STARTING_USER_BALANCE);
}


Здесь мы разворачиваем вспомогательный контракт DeployFundMe и уже через него получаем адреса helperConfig и нашего основного FundMe, для которого мы и будем писать дальше тесты.

3. Посмотрим контракт DeployFundMe:
https://github.com/Cyfrin/foundry-fund-me-f23/blob/main/script/DeployFundMe.s.sol

contract DeployFundMe is Script {
function run() external returns (FundMe, HelperConfig) {
HelperConfig helperConfig = new HelperConfig();
address priceFeed = helperConfig.activeNetworkConfig();

vm.startBroadcast();
FundMe fundMe = new FundMe(priceFeed);
vm.stopBroadcast();
return (fundMe, helperConfig);
}
}


Здесь мы делаем деплой контракта помощника - HelperConfig, и уже через него получаем актуальный для нужной сети адрес контракта ChainlinkPriceFeed. После чего делаем деплой в нужную сеть с нужным адресом!

4. А теперь сам HelperConfig:

https://github.com/Cyfrin/foundry-fund-me-f23/blob/main/script/HelperConfig.s.sol
More from @solidityset
  1. Sep 22, 2026Какой язык программирования учить сейчас? На днях в Твиттере увидел небольшой пост о разви…
  2. Sep 18, 2026Интересная модель Jev Буквально пару дней назад в Твиттере многие начали обсуждение новой…
  3. Sep 14, 2026Графы повсюду Если вы также следите за новостями в мире ИИ, то наверняка уже все чаще встр…
  4. Sep 10, 2026GTA6, Cyberleek, блокчейн и безопасность Увидел несколько постов (тут и тут) про Cyberleek…
  5. Sep 9, 2026Работа с чистой энергией Дисклеймер Сегодня ава и название канала, наконец, поменялись. Я…
  6. Sep 9, 2026Channel name was changed to «Из Solidity в AI и дальше»
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →