TGViewer
Из Solidity в AI и дальше Из Solidity в AI и дальше @solidityset · 2.48K subscribers
Post #924 735
Другими словами, если вы хотите, чтобы только последующий вызов был совершен из-под определенного адреса - используйте простой vm.prank(), если же требуется череда вызовов из-под адреса, то лучше использовать два последних читкода.

Итак, в функцию setUp(), перед созданием контракта Counter, помещаем следующую строку:

vm.prank(ADMIN);

И наш контракт Counter теперь будет иметь владельцем адрес ADMIN. Проверим это в тестах. Напишем простой тест:

function test_SetNumberOwner () public {
vm.startPrank(ADMIN);
counter.setNumberOwner(45);
vm.stopPrank();
}


Здесь мы определяем в тесте, что последующие вызовы будут идти от имени адреса админа и делаем вызов на изменение числа.

Если вместо ADMIN мы подставим адрес HACKER, то тест провалится, что обозначает правильную работу доступа к функции.

Кстати, вот небольшой лайфхак по работе со startPrank и stopPrank, который я подсмотрел в одном из конкурсных протоколов.

Обычно мы пишем тест и уже перед тем, как вызвать необходимую функции из под нужного аккаунта (владельца, пользователя, хакера), мы пишем:

vm.startPrank(user);

и в завершении:

vm.stopPrank();

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

modifier prank(address from) {
  vm.startPrank(from);
  _;
  vm.stopPrank();
}


А потом использовать его, как обычно, в функциях:

function test_addLiquidity() public prank(user) {}


На мой взгляд достаточно элегантное решение.

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

#foundry #lesson14
  • ❤ 1
  • 👍 1
  • 🔥 1
More from @solidityset
  1. Oct 2, 2026Вторая сложность — как доказать, что установилось именно опубликованное. В первом варианте…
  2. Oct 2, 2026Задача с полуоткрытым кодом На днях, в процессе создания одного приложения, столкнулся с и…
  3. Sep 22, 2026Какой язык программирования учить сейчас? На днях в Твиттере увидел небольшой пост о разви…
  4. Sep 18, 2026Интересная модель Jev Буквально пару дней назад в Твиттере многие начали обсуждение новой…
  5. Sep 14, 2026Графы повсюду Если вы также следите за новостями в мире ИИ, то наверняка уже все чаще встр…
  6. Sep 10, 2026GTA6, Cyberleek, блокчейн и безопасность Увидел несколько постов (тут и тут) про Cyberleek…
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 →